]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_man.c
Rudimentary implementation of the .it request (input line trap).
[mandoc.git] / mdoc_man.c
index 953ddee907c47de6a29d68e2ea86f472b3ea4e73..7a28ea78c73aaa32cd671c7888b01da632663ece 100644 (file)
@@ -1,6 +1,6 @@
-/*     $Id: mdoc_man.c,v 1.48 2013/05/19 21:07:51 schwarze Exp $ */
+/*     $Id: mdoc_man.c,v 1.51 2013/06/02 18:16:57 schwarze Exp $ */
 /*
- * Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011, 2012, 2013 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
@@ -182,8 +182,8 @@ static      const struct manact manacts[MDOC_MAX + 1] = {
        { NULL, pre_bx, NULL, NULL, NULL }, /* Bx */
        { NULL, NULL, NULL, NULL, NULL }, /* Db */
        { NULL, NULL, NULL, NULL, NULL }, /* Dc */
-       { cond_body, pre_enc, post_enc, "``", "''" }, /* Do */
-       { cond_body, pre_enc, post_enc, "``", "''" }, /* Dq */
+       { cond_body, pre_enc, post_enc, "\\(lq", "\\(rq" }, /* Do */
+       { cond_body, pre_enc, post_enc, "\\(lq", "\\(rq" }, /* Dq */
        { NULL, NULL, NULL, NULL, NULL }, /* Ec */
        { NULL, NULL, NULL, NULL, NULL }, /* Ef */
        { NULL, pre_em, post_font, NULL, NULL }, /* Em */
@@ -199,14 +199,14 @@ static    const struct manact manacts[MDOC_MAX + 1] = {
        { cond_body, pre_enc, post_enc, "(", ")" }, /* Po */
        { cond_body, pre_enc, post_enc, "(", ")" }, /* Pq */
        { NULL, NULL, NULL, NULL, NULL }, /* Qc */
-       { cond_body, pre_enc, post_enc, "`", "'" }, /* Ql */
+       { cond_body, pre_enc, post_enc, "\\(oq", "\\(cq" }, /* Ql */
        { cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qo */
        { cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qq */
        { NULL, NULL, NULL, NULL, NULL }, /* Re */
        { cond_body, pre_rs, NULL, NULL, NULL }, /* Rs */
        { NULL, NULL, NULL, NULL, NULL }, /* Sc */
-       { cond_body, pre_enc, post_enc, "`", "'" }, /* So */
-       { cond_body, pre_enc, post_enc, "`", "'" }, /* Sq */
+       { cond_body, pre_enc, post_enc, "\\(oq", "\\(cq" }, /* So */
+       { cond_body, pre_enc, post_enc, "\\(oq", "\\(cq" }, /* Sq */
        { NULL, pre_sm, NULL, NULL, NULL }, /* Sm */
        { NULL, pre_em, post_font, NULL, NULL }, /* Sx */
        { NULL, pre_sy, post_font, NULL, NULL }, /* Sy */
@@ -901,7 +901,7 @@ static void
 post_bk(DECL_ARGS)
 {
 
-       if (MDOC_BODY == n->type)
+       if (MDOC_BODY == n->type && ! (MDOC_SYNPRETTY & n->flags))
                outflags &= ~MMAN_Bk;
 }
 
@@ -910,6 +910,16 @@ pre_bl(DECL_ARGS)
 {
        size_t           icol;
 
+       /*
+        * print_offs() will increase the -offset to account for
+        * a possible enclosing .It, but any enclosed .It blocks
+        * just nest and do not add up their indentation.
+        */
+       if (n->norm->Bl.offs) {
+               print_offs(n->norm->Bl.offs);
+               Bl_stack[Bl_stack_len++] = 0;
+       }
+
        switch (n->norm->Bl.type) {
        case (LIST_enum):
                n->norm->Bl.count = 0;
@@ -942,8 +952,16 @@ post_bl(DECL_ARGS)
        default:
                break;
        }
-       outflags |= MMAN_PP | MMAN_nl;
-       outflags &= ~(MMAN_sp | MMAN_br);
+
+       if (n->norm->Bl.offs) {
+               print_line(".RE", MMAN_nl);
+               assert(Bl_stack_len);
+               Bl_stack_len--;
+               assert(0 == Bl_stack[Bl_stack_len]);
+       } else {
+               outflags |= MMAN_PP | MMAN_nl;
+               outflags &= ~(MMAN_sp | MMAN_br);
+       }
 
        /* Maybe we are inside an enclosing list? */
        if (NULL != n->parent->next)