[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.135 and 1.137

version 1.135, 2020/02/20 22:55:42 version 1.137, 2021/07/04 15:38:26
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2011-2020 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2011-2021 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 113  static int   pre_sm(DECL_ARGS);
Line 113  static int   pre_sm(DECL_ARGS);
 static  void      pre_sp(DECL_ARGS);  static  void      pre_sp(DECL_ARGS);
 static  int       pre_sect(DECL_ARGS);  static  int       pre_sect(DECL_ARGS);
 static  int       pre_sy(DECL_ARGS);  static  int       pre_sy(DECL_ARGS);
 static  void      pre_syn(const struct roff_node *);  static  void      pre_syn(struct roff_node *);
 static  void      pre_ta(DECL_ARGS);  static  void      pre_ta(DECL_ARGS);
 static  int       pre_vt(DECL_ARGS);  static  int       pre_vt(DECL_ARGS);
 static  int       pre_xr(DECL_ARGS);  static  int       pre_xr(DECL_ARGS);
Line 650  print_node(DECL_ARGS)
Line 650  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.
          */           */
         if (MMAN_spc & outflags && NODE_LINE & n->flags)          if (outflags & MMAN_spc &&
               n->flags & NODE_LINE &&
               !roff_node_transparent(n))
                 outflags |= MMAN_nl;                  outflags |= MMAN_nl;
   
         act = NULL;          act = NULL;
Line 658  print_node(DECL_ARGS)
Line 660  print_node(DECL_ARGS)
         do_sub = 1;          do_sub = 1;
         n->flags &= ~NODE_ENDED;          n->flags &= ~NODE_ENDED;
   
         if (n->type == ROFFT_TEXT) {          switch (n->type) {
           case ROFFT_EQN:
           case ROFFT_TBL:
                   mandoc_msg(n->type == ROFFT_EQN ? MANDOCERR_EQN_TMAN :
                       MANDOCERR_TBL_TMAN, n->line, n->pos, NULL);
                   outflags |= MMAN_PP | MMAN_sp | MMAN_nl;
                   print_word("The");
                   print_line(".B \\-T man", MMAN_nl);
                   print_word("output mode does not support");
                   print_word(n->type == ROFFT_EQN ? "eqn(7)" : "tbl(7)");
                   print_word("input.");
                   outflags |= MMAN_PP | MMAN_sp | MMAN_nl;
                   return;
           case ROFFT_TEXT:
                 /*                  /*
                  * Make sure that we don't happen to start with a                   * Make sure that we don't happen to start with a
                  * control character at the start of a line.                   * control character at the start of a line.
Line 678  print_node(DECL_ARGS)
Line 693  print_node(DECL_ARGS)
                         outflags &= ~(MMAN_spc | MMAN_spc_force);                          outflags &= ~(MMAN_spc | MMAN_spc_force);
                 else if (outflags & MMAN_Sm)                  else if (outflags & MMAN_Sm)
                         outflags |= MMAN_spc;                          outflags |= MMAN_spc;
         } else if (n->tok < ROFF_MAX) {                  break;
                 (*roff_man_acts[n->tok])(meta, n);          default:
                 return;                  if (n->tok < ROFF_MAX) {
         } else {                          (*roff_man_acts[n->tok])(meta, n);
                 /*                          return;
                  * Conditionally run the pre-node action handler for a                  }
                  * node.  
                  */  
                 act = mdoc_man_act(n->tok);                  act = mdoc_man_act(n->tok);
                 cond = act->cond == NULL || (*act->cond)(meta, n);                  cond = act->cond == NULL || (*act->cond)(meta, n);
                 if (cond && act->pre != NULL &&                  if (cond && act->pre != NULL &&
                     (n->end == ENDBODY_NOT || n->child != NULL))                      (n->end == ENDBODY_NOT || n->child != NULL))
                         do_sub = (*act->pre)(meta, n);                          do_sub = (*act->pre)(meta, n);
                   break;
         }          }
   
         /*          /*
Line 777  post_font(DECL_ARGS)
Line 791  post_font(DECL_ARGS)
 static void  static void
 post_percent(DECL_ARGS)  post_percent(DECL_ARGS)
 {  {
           struct roff_node *np, *nn, *nnn;
   
         if (mdoc_man_act(n->tok)->pre == pre_em)          if (mdoc_man_act(n->tok)->pre == pre_em)
                 font_pop();                  font_pop();
         if (n->next) {  
                 print_word(",");          if ((nn = roff_node_next(n)) != NULL) {
                 if (n->prev &&  n->prev->tok == n->tok &&                  np = roff_node_prev(n);
                                 n->next->tok == n->tok)                  nnn = nn == NULL ? NULL : roff_node_next(nn);
                   if (nn->tok != n->tok ||
                       (np != NULL && np->tok == n->tok) ||
                       (nnn != NULL && nnn->tok == n->tok))
                           print_word(",");
                   if (nn->tok == n->tok &&
                       (nnn == NULL || nnn->tok != n->tok))
                         print_word("and");                          print_word("and");
         } else {          } else {
                 print_word(".");                  print_word(".");
Line 851  post_sect(DECL_ARGS)
Line 872  post_sect(DECL_ARGS)
   
 /* See mdoc_term.c, synopsis_pre() for comments. */  /* See mdoc_term.c, synopsis_pre() for comments. */
 static void  static void
 pre_syn(const struct roff_node *n)  pre_syn(struct roff_node *n)
 {  {
           struct roff_node *np;
   
         if (NULL == n->prev || ! (NODE_SYNPRETTY & n->flags))          if ((n->flags & NODE_SYNPRETTY) == 0 ||
               (np = roff_node_prev(n)) == NULL)
                 return;                  return;
   
         if (n->prev->tok == n->tok &&          if (np->tok == n->tok &&
             MDOC_Ft != n->tok &&              MDOC_Ft != n->tok &&
             MDOC_Fo != n->tok &&              MDOC_Fo != n->tok &&
             MDOC_Fn != n->tok) {              MDOC_Fn != n->tok) {
Line 865  pre_syn(const struct roff_node *n)
Line 888  pre_syn(const struct roff_node *n)
                 return;                  return;
         }          }
   
         switch (n->prev->tok) {          switch (np->tok) {
         case MDOC_Fd:          case MDOC_Fd:
         case MDOC_Fn:          case MDOC_Fn:
         case MDOC_Fo:          case MDOC_Fo:
Line 941  static int
Line 964  static int
 pre_bd(DECL_ARGS)  pre_bd(DECL_ARGS)
 {  {
         outflags &= ~(MMAN_PP | MMAN_sp | MMAN_br);          outflags &= ~(MMAN_PP | MMAN_sp | MMAN_br);
           if (n->norm->Bd.type == DISP_unfilled ||
         if (DISP_unfilled == n->norm->Bd.type ||              n->norm->Bd.type == DISP_literal)
             DISP_literal  == n->norm->Bd.type)  
                 print_line(".nf", 0);                  print_line(".nf", 0);
         if (0 == n->norm->Bd.comp && NULL != n->parent->prev)          if (n->norm->Bd.comp == 0 && roff_node_prev(n->parent) != NULL)
                 outflags |= MMAN_sp;                  outflags |= MMAN_sp;
         print_offs(n->norm->Bd.offs, 1);          print_offs(n->norm->Bd.offs, 1);
         return 1;          return 1;
Line 977  post_bd(DECL_ARGS)
Line 999  post_bd(DECL_ARGS)
         }          }
   
         /* Maybe we are inside an enclosing list? */          /* Maybe we are inside an enclosing list? */
         if (NULL != n->parent->next)          if (roff_node_next(n->parent) != NULL)
                 mid_it();                  mid_it();
 }  }
   
Line 1102  post_bl(DECL_ARGS)
Line 1124  post_bl(DECL_ARGS)
                 print_line(".RE", MMAN_nl);                  print_line(".RE", MMAN_nl);
                 assert(Bl_stack_len);                  assert(Bl_stack_len);
                 Bl_stack_len--;                  Bl_stack_len--;
                 assert(0 == Bl_stack[Bl_stack_len]);                  assert(Bl_stack[Bl_stack_len] == 0);
         } else {          } else {
                 outflags |= MMAN_PP | MMAN_nl;                  outflags |= MMAN_PP | MMAN_nl;
                 outflags &= ~(MMAN_sp | MMAN_br);                  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 (roff_node_next(n->parent) != NULL)
                 mid_it();                  mid_it();
   
 }  }
   
 static void  static void
Line 1123  pre_br(DECL_ARGS)
Line 1144  pre_br(DECL_ARGS)
 static int  static int
 pre_dl(DECL_ARGS)  pre_dl(DECL_ARGS)
 {  {
   
         print_offs("6n", 0);          print_offs("6n", 0);
         return 1;          return 1;
 }  }
Line 1131  pre_dl(DECL_ARGS)
Line 1151  pre_dl(DECL_ARGS)
 static void  static void
 post_dl(DECL_ARGS)  post_dl(DECL_ARGS)
 {  {
   
         print_line(".RE", MMAN_nl);          print_line(".RE", MMAN_nl);
   
         /* Maybe we are inside an enclosing list? */          /* Maybe we are inside an enclosing list? */
         if (NULL != n->parent->next)          if (roff_node_next(n->parent) != NULL)
                 mid_it();                  mid_it();
 }  }
   
Line 1236  pre_fa(DECL_ARGS)
Line 1255  pre_fa(DECL_ARGS)
 static void  static void
 post_fa(DECL_ARGS)  post_fa(DECL_ARGS)
 {  {
           struct roff_node *nn;
   
         if (NULL != n->next && MDOC_Fa == n->next->tok)          if ((nn = roff_node_next(n)) != NULL && nn->tok == MDOC_Fa)
                 print_word(",");                  print_word(",");
 }  }
   
 static int  static int
 pre_fd(DECL_ARGS)  pre_fd(DECL_ARGS)
 {  {
   
         pre_syn(n);          pre_syn(n);
         font_push('B');          font_push('B');
         return 1;          return 1;
Line 1253  pre_fd(DECL_ARGS)
Line 1272  pre_fd(DECL_ARGS)
 static void  static void
 post_fd(DECL_ARGS)  post_fd(DECL_ARGS)
 {  {
   
         font_pop();          font_pop();
         outflags |= MMAN_br;          outflags |= MMAN_br;
 }  }
Line 1261  post_fd(DECL_ARGS)
Line 1279  post_fd(DECL_ARGS)
 static int  static int
 pre_fl(DECL_ARGS)  pre_fl(DECL_ARGS)
 {  {
   
         font_push('B');          font_push('B');
         print_word("\\-");          print_word("\\-");
         if (n->child != NULL)          if (n->child != NULL)
Line 1272  pre_fl(DECL_ARGS)
Line 1289  pre_fl(DECL_ARGS)
 static void  static void
 post_fl(DECL_ARGS)  post_fl(DECL_ARGS)
 {  {
           struct roff_node *nn;
   
         font_pop();          font_pop();
         if (!(n->child != NULL ||          if (n->child == NULL &&
             n->next == NULL ||              ((nn = roff_node_next(n)) != NULL &&
             n->next->type == ROFFT_TEXT ||              nn->type != ROFFT_TEXT &&
             n->next->flags & NODE_LINE))              (nn->flags & NODE_LINE) == 0))
                 outflags &= ~MMAN_spc;                  outflags &= ~MMAN_spc;
 }  }
   
Line 1420  pre_it(DECL_ARGS)
Line 1438  pre_it(DECL_ARGS)
         case ROFFT_HEAD:          case ROFFT_HEAD:
                 outflags |= MMAN_PP | MMAN_nl;                  outflags |= MMAN_PP | MMAN_nl;
                 bln = n->parent->parent;                  bln = n->parent->parent;
                 if (0 == bln->norm->Bl.comp ||                  if (bln->norm->Bl.comp == 0 ||
                     (NULL == n->parent->prev &&                      (n->parent->prev == NULL &&
                      NULL == bln->parent->prev))                       roff_node_prev(bln->parent) == NULL))
                         outflags |= MMAN_sp;                          outflags |= MMAN_sp;
                 outflags &= ~MMAN_br;                  outflags &= ~MMAN_br;
                 switch (bln->norm->Bl.type) {                  switch (bln->norm->Bl.type) {
Line 1634  pre_nm(DECL_ARGS)
Line 1652  pre_nm(DECL_ARGS)
 {  {
         char    *name;          char    *name;
   
         if (n->type == ROFFT_BLOCK) {          switch (n->type) {
           case ROFFT_BLOCK:
                 outflags |= MMAN_Bk;                  outflags |= MMAN_Bk;
                 pre_syn(n);                  pre_syn(n);
         }  
         if (n->type != ROFFT_ELEM && n->type != ROFFT_HEAD)  
                 return 1;                  return 1;
           case ROFFT_HEAD:
           case ROFFT_ELEM:
                   break;
           default:
                   return 1;
           }
         name = n->child == NULL ? NULL : n->child->string;          name = n->child == NULL ? NULL : n->child->string;
         if (NULL == name)          if (name == NULL)
                 return 0;                  return 0;
         if (n->type == ROFFT_HEAD) {          if (n->type == ROFFT_HEAD) {
                 if (NULL == n->parent->prev)                  if (roff_node_prev(n->parent) == NULL)
                         outflags |= MMAN_sp;                          outflags |= MMAN_sp;
                 print_block(".HP", 0);                  print_block(".HP", 0);
                 printf(" %dn", man_strlen(name) + 1);                  printf(" %dn", man_strlen(name) + 1);

Legend:
Removed from v.1.135  
changed lines
  Added in v.1.137

CVSweb