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

Diff for /mandoc/mdoc_term.c between version 1.365 and 1.368

version 1.365, 2018/01/13 05:23:18 version 1.368, 2018/08/17 20:33:38
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010, 2012-2018 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>   * Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
Line 47  struct termpair {
Line 47  struct termpair {
                   const struct roff_meta *meta, \                    const struct roff_meta *meta, \
                   struct roff_node *n                    struct roff_node *n
   
 struct  termact {  struct  mdoc_term_act {
         int     (*pre)(DECL_ARGS);          int     (*pre)(DECL_ARGS);
         void    (*post)(DECL_ARGS);          void    (*post)(DECL_ARGS);
 };  };
Line 124  static int   termp_vt_pre(DECL_ARGS);
Line 124  static int   termp_vt_pre(DECL_ARGS);
 static  int       termp_xr_pre(DECL_ARGS);  static  int       termp_xr_pre(DECL_ARGS);
 static  int       termp_xx_pre(DECL_ARGS);  static  int       termp_xx_pre(DECL_ARGS);
   
 static  const struct termact __termacts[MDOC_MAX - MDOC_Dd] = {  static const struct mdoc_term_act mdoc_term_acts[MDOC_MAX - MDOC_Dd] = {
         { NULL, NULL }, /* Dd */          { NULL, NULL }, /* Dd */
         { NULL, NULL }, /* Dt */          { NULL, NULL }, /* Dt */
         { NULL, NULL }, /* Os */          { NULL, NULL }, /* Os */
Line 246  static const struct termact __termacts[MDOC_MAX - MDOC
Line 246  static const struct termact __termacts[MDOC_MAX - MDOC
         { NULL, termp____post }, /* %U */          { NULL, termp____post }, /* %U */
         { NULL, NULL }, /* Ta */          { NULL, NULL }, /* Ta */
 };  };
 static  const struct termact *const termacts = __termacts - MDOC_Dd;  
   
 static  int      fn_prio;  static  int      fn_prio;
   
Line 283  terminal_mdoc(void *arg, const struct roff_man *mdoc)
Line 282  terminal_mdoc(void *arg, const struct roff_man *mdoc)
                         p->defindent = 5;                          p->defindent = 5;
                 term_begin(p, print_mdoc_head, print_mdoc_foot,                  term_begin(p, print_mdoc_head, print_mdoc_foot,
                     &mdoc->meta);                      &mdoc->meta);
                 while (n != NULL && n->flags & NODE_NOPRT)                  while (n != NULL &&
                       (n->type == ROFFT_COMMENT ||
                        n->flags & NODE_NOPRT))
                         n = n->next;                          n = n->next;
                 if (n != NULL) {                  if (n != NULL) {
                         if (n->tok != MDOC_Sh)                          if (n->tok != MDOC_Sh)
Line 308  print_mdoc_nodelist(DECL_ARGS)
Line 309  print_mdoc_nodelist(DECL_ARGS)
 static void  static void
 print_mdoc_node(DECL_ARGS)  print_mdoc_node(DECL_ARGS)
 {  {
         int              chld;          const struct mdoc_term_act *act;
         struct termpair  npair;          struct termpair  npair;
         size_t           offset, rmargin;          size_t           offset, rmargin;
           int              chld;
   
         if (n->flags & NODE_NOPRT)          if (n->type == ROFFT_COMMENT || n->flags & NODE_NOPRT)
                 return;                  return;
   
         chld = 1;          chld = 1;
Line 368  print_mdoc_node(DECL_ARGS)
Line 370  print_mdoc_node(DECL_ARGS)
                         return;                          return;
                 }                  }
                 assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);                  assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
                 if (termacts[n->tok].pre != NULL &&                  act = mdoc_term_acts + (n->tok - MDOC_Dd);
                   if (act->pre != NULL &&
                     (n->end == ENDBODY_NOT || n->child != NULL))                      (n->end == ENDBODY_NOT || n->child != NULL))
                         chld = (*termacts[n->tok].pre)                          chld = (*act->pre)(p, &npair, meta, n);
                                 (p, &npair, meta, n);  
                 break;                  break;
         }          }
   
Line 389  print_mdoc_node(DECL_ARGS)
Line 391  print_mdoc_node(DECL_ARGS)
         case ROFFT_EQN:          case ROFFT_EQN:
                 break;                  break;
         default:          default:
                 if (termacts[n->tok].post == NULL || n->flags & NODE_ENDED)                  if (act->post == NULL || n->flags & NODE_ENDED)
                         break;                          break;
                 (void)(*termacts[n->tok].post)(p, &npair, meta, n);                  (void)(*act->post)(p, &npair, meta, n);
   
                 /*                  /*
                  * Explicit end tokens not only call the post                   * Explicit end tokens not only call the post
Line 567  print_bvspace(struct termp *p,
Line 569  print_bvspace(struct termp *p,
         /* Do not vspace directly after Ss/Sh. */          /* Do not vspace directly after Ss/Sh. */
   
         nn = n;          nn = n;
         while (nn->prev != NULL && nn->prev->flags & NODE_NOPRT)          while (nn->prev != NULL &&
               (nn->prev->type == ROFFT_COMMENT ||
                nn->prev->flags & NODE_NOPRT))
                 nn = nn->prev;                  nn = nn->prev;
         while (nn->prev == NULL) {          while (nn->prev == NULL) {
                 do {                  do {
Line 1550  termp_ss_pre(DECL_ARGS)
Line 1554  termp_ss_pre(DECL_ARGS)
         case ROFFT_BLOCK:          case ROFFT_BLOCK:
                 term_newln(p);                  term_newln(p);
                 for (nn = n->prev; nn != NULL; nn = nn->prev)                  for (nn = n->prev; nn != NULL; nn = nn->prev)
                         if ((nn->flags & NODE_NOPRT) == 0)                          if (nn->type != ROFFT_COMMENT &&
                               (nn->flags & NODE_NOPRT) == 0)
                                 break;                                  break;
                 if (nn != NULL)                  if (nn != NULL)
                         term_vspace(p);                          term_vspace(p);
Line 1664  termp_quote_pre(DECL_ARGS)
Line 1669  termp_quote_pre(DECL_ARGS)
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_Do:          case MDOC_Do:
         case MDOC_Dq:          case MDOC_Dq:
                 term_word(p, "\\(Lq");                  term_word(p, "\\(lq");
                 break;                  break;
         case MDOC_En:          case MDOC_En:
                 if (NULL == n->norm->Es ||                  if (NULL == n->norm->Es ||
Line 1722  termp_quote_post(DECL_ARGS)
Line 1727  termp_quote_post(DECL_ARGS)
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_Do:          case MDOC_Do:
         case MDOC_Dq:          case MDOC_Dq:
                 term_word(p, "\\(Rq");                  term_word(p, "\\(rq");
                 break;                  break;
         case MDOC_En:          case MDOC_En:
                 if (n->norm->Es == NULL ||                  if (n->norm->Es == NULL ||

Legend:
Removed from v.1.365  
changed lines
  Added in v.1.368

CVSweb