[BACK]Return to mdoc_man.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mdoc_man.c between version 1.48 and 1.54

version 1.48, 2013/05/19 21:07:51 version 1.54, 2013/12/24 20:45:27
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * 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   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 182  static const struct manact manacts[MDOC_MAX + 1] = {
Line 182  static const struct manact manacts[MDOC_MAX + 1] = {
         { NULL, pre_bx, NULL, NULL, NULL }, /* Bx */          { NULL, pre_bx, NULL, NULL, NULL }, /* Bx */
         { NULL, NULL, NULL, NULL, NULL }, /* Db */          { NULL, NULL, NULL, NULL, NULL }, /* Db */
         { NULL, NULL, NULL, NULL, NULL }, /* Dc */          { NULL, NULL, NULL, NULL, NULL }, /* Dc */
         { cond_body, pre_enc, post_enc, "``", "''" }, /* Do */          { cond_body, pre_enc, post_enc, "\\(lq", "\\(rq" }, /* Do */
         { cond_body, pre_enc, post_enc, "``", "''" }, /* Dq */          { cond_body, pre_enc, post_enc, "\\(lq", "\\(rq" }, /* Dq */
         { NULL, NULL, NULL, NULL, NULL }, /* Ec */          { NULL, NULL, NULL, NULL, NULL }, /* Ec */
         { NULL, NULL, NULL, NULL, NULL }, /* Ef */          { NULL, NULL, NULL, NULL, NULL }, /* Ef */
         { NULL, pre_em, post_font, NULL, NULL }, /* Em */          { NULL, pre_em, post_font, NULL, NULL }, /* Em */
Line 199  static const struct manact manacts[MDOC_MAX + 1] = {
Line 199  static const struct manact manacts[MDOC_MAX + 1] = {
         { cond_body, pre_enc, post_enc, "(", ")" }, /* Po */          { cond_body, pre_enc, post_enc, "(", ")" }, /* Po */
         { cond_body, pre_enc, post_enc, "(", ")" }, /* Pq */          { cond_body, pre_enc, post_enc, "(", ")" }, /* Pq */
         { NULL, NULL, NULL, NULL, NULL }, /* Qc */          { 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, "\"", "\"" }, /* Qo */
         { cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qq */          { cond_body, pre_enc, post_enc, "\"", "\"" }, /* Qq */
         { NULL, NULL, NULL, NULL, NULL }, /* Re */          { NULL, NULL, NULL, NULL, NULL }, /* Re */
         { cond_body, pre_rs, NULL, NULL, NULL }, /* Rs */          { cond_body, pre_rs, NULL, NULL, NULL }, /* Rs */
         { NULL, NULL, NULL, NULL, NULL }, /* Sc */          { NULL, NULL, NULL, NULL, NULL }, /* Sc */
         { cond_body, pre_enc, post_enc, "`", "'" }, /* So */          { cond_body, pre_enc, post_enc, "\\(oq", "\\(cq" }, /* So */
         { cond_body, pre_enc, post_enc, "`", "'" }, /* Sq */          { cond_body, pre_enc, post_enc, "\\(oq", "\\(cq" }, /* Sq */
         { NULL, pre_sm, NULL, NULL, NULL }, /* Sm */          { NULL, pre_sm, NULL, NULL, NULL }, /* Sm */
         { NULL, pre_em, post_font, NULL, NULL }, /* Sx */          { NULL, pre_em, post_font, NULL, NULL }, /* Sx */
         { NULL, pre_sy, post_font, NULL, NULL }, /* Sy */          { NULL, pre_sy, post_font, NULL, NULL }, /* Sy */
Line 442  print_offs(const char *v)
Line 442  print_offs(const char *v)
         if (Bl_stack_len)          if (Bl_stack_len)
                 sz += Bl_stack[Bl_stack_len - 1];                  sz += Bl_stack[Bl_stack_len - 1];
   
         snprintf(buf, sizeof(buf), "%ldn", sz);          snprintf(buf, sizeof(buf), "%zun", sz);
         print_word(buf);          print_word(buf);
         outflags |= MMAN_nl;          outflags |= MMAN_nl;
 }  }
Line 495  print_width(const char *v, const struct mdoc_node *chi
Line 495  print_width(const char *v, const struct mdoc_node *chi
                 remain = sz + 2;                  remain = sz + 2;
         }          }
         if (numeric) {          if (numeric) {
                 snprintf(buf, sizeof(buf), "%ldn", sz + 2);                  snprintf(buf, sizeof(buf), "%zun", sz + 2);
                 print_word(buf);                  print_word(buf);
         } else          } else
                 print_word(v);                  print_word(v);
Line 553  man_mdoc(void *arg, const struct mdoc *mdoc)
Line 553  man_mdoc(void *arg, const struct mdoc *mdoc)
 static void  static void
 print_node(DECL_ARGS)  print_node(DECL_ARGS)
 {  {
         const struct mdoc_node  *prev, *sub;          const struct mdoc_node  *sub;
         const struct manact     *act;          const struct manact     *act;
         int                      cond, do_sub;          int                      cond, do_sub;
   
Line 561  print_node(DECL_ARGS)
Line 561  print_node(DECL_ARGS)
          * Break the line if we were parsed subsequent the current node.           * Break the line if we were parsed subsequent the current node.
          * This makes the page structure be more consistent.           * This makes the page structure be more consistent.
          */           */
         prev = n->prev ? n->prev : n->parent;          if (MMAN_spc & outflags && MDOC_LINE & n->flags)
         if (MMAN_spc & outflags && prev && prev->line < n->line)  
                 outflags |= MMAN_nl;                  outflags |= MMAN_nl;
   
         act = NULL;          act = NULL;
Line 706  static int
Line 705  static int
 pre_sect(DECL_ARGS)  pre_sect(DECL_ARGS)
 {  {
   
         switch (n->type) {          if (MDOC_HEAD == n->type) {
         case (MDOC_HEAD):  
                 outflags |= MMAN_sp;                  outflags |= MMAN_sp;
                 print_block(manacts[n->tok].prefix, 0);                  print_block(manacts[n->tok].prefix, 0);
                 print_word("");                  print_word("");
                 putchar('\"');                  putchar('\"');
                 outflags &= ~MMAN_spc;                  outflags &= ~MMAN_spc;
                 break;  
         case (MDOC_BODY):  
                 if (MDOC_Sh == n->tok) {  
                         if (MDOC_SYNPRETTY & n->flags)  
                                 outflags |= MMAN_Bk;  
                         else  
                                 outflags &= ~MMAN_Bk;  
                 }  
                 break;  
         default:  
                 break;  
         }          }
         return(1);          return(1);
 }  }
Line 910  pre_bl(DECL_ARGS)
Line 897  pre_bl(DECL_ARGS)
 {  {
         size_t           icol;          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) {          switch (n->norm->Bl.type) {
         case (LIST_enum):          case (LIST_enum):
                 n->norm->Bl.count = 0;                  n->norm->Bl.count = 0;
Line 942  post_bl(DECL_ARGS)
Line 939  post_bl(DECL_ARGS)
         default:          default:
                 break;                  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? */          /* Maybe we are inside an enclosing list? */
         if (NULL != n->parent->next)          if (NULL != n->parent->next)
                 mid_it();                  mid_it();
Line 1277  mid_it(void)
Line 1282  mid_it(void)
   
         /* Restore the indentation of the enclosing list. */          /* Restore the indentation of the enclosing list. */
         print_line(".RS", MMAN_Bk_susp);          print_line(".RS", MMAN_Bk_susp);
         snprintf(buf, sizeof(buf), "%ldn", Bl_stack[Bl_stack_len - 1]);          snprintf(buf, sizeof(buf), "%zun", Bl_stack[Bl_stack_len - 1]);
         print_word(buf);          print_word(buf);
   
         /* Remeber to close out this .RS block later. */          /* Remeber to close out this .RS block later. */
Line 1391  pre_nm(DECL_ARGS)
Line 1396  pre_nm(DECL_ARGS)
 {  {
         char    *name;          char    *name;
   
         if (MDOC_BLOCK == n->type)          if (MDOC_BLOCK == n->type) {
                   outflags |= MMAN_Bk;
                 pre_syn(n);                  pre_syn(n);
           }
         if (MDOC_ELEM != n->type && MDOC_HEAD != n->type)          if (MDOC_ELEM != n->type && MDOC_HEAD != n->type)
                 return(1);                  return(1);
         name = n->child ? n->child->string : meta->name;          name = n->child ? n->child->string : meta->name;
Line 1402  pre_nm(DECL_ARGS)
Line 1409  pre_nm(DECL_ARGS)
                 if (NULL == n->parent->prev)                  if (NULL == n->parent->prev)
                         outflags |= MMAN_sp;                          outflags |= MMAN_sp;
                 print_block(".HP", 0);                  print_block(".HP", 0);
                 printf(" %ldn", strlen(name) + 1);                  printf(" %zun", strlen(name) + 1);
                 outflags |= MMAN_nl;                  outflags |= MMAN_nl;
         }          }
         font_push('B');          font_push('B');
Line 1415  static void
Line 1422  static void
 post_nm(DECL_ARGS)  post_nm(DECL_ARGS)
 {  {
   
         if (MDOC_ELEM != n->type && MDOC_HEAD != n->type)          switch (n->type) {
                 return;          case (MDOC_BLOCK):
         font_pop();                  outflags &= ~MMAN_Bk;
                   break;
           case (MDOC_HEAD):
                   /* FALLTHROUGH */
           case (MDOC_ELEM):
                   font_pop();
                   break;
           default:
                   break;
           }
 }  }
   
 static int  static int

Legend:
Removed from v.1.48  
changed lines
  Added in v.1.54

CVSweb