[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.142 and 1.143

version 1.142, 2010/06/06 22:08:15 version 1.143, 2010/06/07 11:01:15
Line 68  static void     print_mdoc_node(DECL_ARGS);
Line 68  static void     print_mdoc_node(DECL_ARGS);
 static  void      print_mdoc_head(DECL_ARGS);  static  void      print_mdoc_head(DECL_ARGS);
 static  void      print_mdoc_nodelist(DECL_ARGS);  static  void      print_mdoc_nodelist(DECL_ARGS);
 static  void      print_foot(DECL_ARGS);  static  void      print_foot(DECL_ARGS);
   static  void      synopsis_pre(struct termp *,
                           const struct mdoc_node *);
   
 static  void      termp____post(DECL_ARGS);  static  void      termp____post(DECL_ARGS);
 static  void      termp_an_post(DECL_ARGS);  static  void      termp_an_post(DECL_ARGS);
Line 79  static void   termp_brq_post(DECL_ARGS);
Line 81  static void   termp_brq_post(DECL_ARGS);
 static  void      termp_bx_post(DECL_ARGS);  static  void      termp_bx_post(DECL_ARGS);
 static  void      termp_d1_post(DECL_ARGS);  static  void      termp_d1_post(DECL_ARGS);
 static  void      termp_dq_post(DECL_ARGS);  static  void      termp_dq_post(DECL_ARGS);
 static  void      termp_fd_post(DECL_ARGS);  static  int       termp_fd_pre(DECL_ARGS);
 static  void      termp_fn_post(DECL_ARGS);  
 static  void      termp_fo_post(DECL_ARGS);  static  void      termp_fo_post(DECL_ARGS);
 static  void      termp_in_post(DECL_ARGS);  static  void      termp_in_post(DECL_ARGS);
 static  void      termp_it_post(DECL_ARGS);  static  void      termp_it_post(DECL_ARGS);
Line 92  static void   termp_qq_post(DECL_ARGS);
Line 93  static void   termp_qq_post(DECL_ARGS);
 static  void      termp_sh_post(DECL_ARGS);  static  void      termp_sh_post(DECL_ARGS);
 static  void      termp_sq_post(DECL_ARGS);  static  void      termp_sq_post(DECL_ARGS);
 static  void      termp_ss_post(DECL_ARGS);  static  void      termp_ss_post(DECL_ARGS);
 static  void      termp_vt_post(DECL_ARGS);  
   
 static  int       termp_an_pre(DECL_ARGS);  static  int       termp_an_pre(DECL_ARGS);
 static  int       termp_ap_pre(DECL_ARGS);  static  int       termp_ap_pre(DECL_ARGS);
Line 162  static const struct termact termacts[MDOC_MAX] = {
Line 162  static const struct termact termacts[MDOC_MAX] = {
         { NULL, NULL }, /* Ev */          { NULL, NULL }, /* Ev */
         { termp_ex_pre, NULL }, /* Ex */          { termp_ex_pre, NULL }, /* Ex */
         { termp_fa_pre, NULL }, /* Fa */          { termp_fa_pre, NULL }, /* Fa */
         { termp_bold_pre, termp_fd_post }, /* Fd */          { termp_fd_pre, NULL }, /* Fd */
         { termp_fl_pre, NULL }, /* Fl */          { termp_fl_pre, NULL }, /* Fl */
         { termp_fn_pre, termp_fn_post }, /* Fn */          { termp_fn_pre, NULL }, /* Fn */
         { termp_ft_pre, NULL }, /* Ft */          { termp_ft_pre, NULL }, /* Ft */
         { termp_bold_pre, NULL }, /* Ic */          { termp_bold_pre, NULL }, /* Ic */
         { termp_in_pre, termp_in_post }, /* In */          { termp_in_pre, termp_in_post }, /* In */
Line 177  static const struct termact termacts[MDOC_MAX] = {
Line 177  static const struct termact termacts[MDOC_MAX] = {
         { termp_rv_pre, NULL }, /* Rv */          { termp_rv_pre, NULL }, /* Rv */
         { NULL, NULL }, /* St */          { NULL, NULL }, /* St */
         { termp_under_pre, NULL }, /* Va */          { termp_under_pre, NULL }, /* Va */
         { termp_vt_pre, termp_vt_post }, /* Vt */          { termp_vt_pre, NULL }, /* Vt */
         { termp_xr_pre, NULL }, /* Xr */          { termp_xr_pre, NULL }, /* Xr */
         { NULL, termp____post }, /* %A */          { NULL, termp____post }, /* %A */
         { termp_under_pre, termp____post }, /* %B */          { termp_under_pre, termp____post }, /* %B */
Line 1055  termp_nm_pre(DECL_ARGS)
Line 1055  termp_nm_pre(DECL_ARGS)
         if (NULL == n->child && NULL == m->name)          if (NULL == n->child && NULL == m->name)
                 return(1);                  return(1);
   
         if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags)          synopsis_pre(p, n);
                 term_newln(p);  
   
         term_fontpush(p, TERMFONT_BOLD);          term_fontpush(p, TERMFONT_BOLD);
   
         if (NULL == n->child)          if (NULL == n->child)
                 term_word(p, m->name);                  term_word(p, m->name);
   
         return(1);          return(1);
 }  }
   
Line 1313  termp_xr_pre(DECL_ARGS)
Line 1310  termp_xr_pre(DECL_ARGS)
 }  }
   
   
   /*
    * This decides how to assert whitespace before any of the SYNOPSIS set
    * of macros (which, as in the case of Ft/Fo and Ft/Fn, may contain
    * macro combos).
    */
   static void
   synopsis_pre(struct termp *p, const struct mdoc_node *n)
   {
           /*
            * Obviously, if we're not in a SYNOPSIS or no prior macros
            * exist, do nothing.
            */
           if (NULL == n->prev || SEC_SYNOPSIS != n->sec)
                   return;
   
           /*
            * If we're the second in a pair of like elements, emit our
            * newline and return.  UNLESS we're `Fo', `Fn', `Fn', in which
            * case we soldier on.
            */
           if (n->prev->tok == n->tok &&
                           MDOC_Ft != n->tok &&
                           MDOC_Fo != n->tok &&
                           MDOC_Fn != n->tok) {
                   term_newln(p);
                   return;
           }
   
           /*
            * If we're one of the SYNOPSIS set and non-like pair-wise after
            * another (or Fn/Fo, which we've let slip through) then assert
            * vertical space, else only newline and move on.
            */
           switch (n->prev->tok) {
           case (MDOC_Fd):
                   /* FALLTHROUGH */
           case (MDOC_Fn):
                   /* FALLTHROUGH */
           case (MDOC_Fo):
                   /* FALLTHROUGH */
           case (MDOC_In):
                   /* FALLTHROUGH */
           case (MDOC_Vt):
                   term_vspace(p);
                   break;
           case (MDOC_Ft):
                   if (MDOC_Fn != n->tok && MDOC_Fo != n->tok) {
                           term_vspace(p);
                           break;
                   }
                   /* FALLTHROUGH */
           default:
                   term_newln(p);
                   break;
           }
   }
   
   
 static int  static int
 termp_vt_pre(DECL_ARGS)  termp_vt_pre(DECL_ARGS)
 {  {
   
         if (MDOC_ELEM == n->type)          if (MDOC_ELEM == n->type) {
                   synopsis_pre(p, n);
                 return(termp_under_pre(p, pair, m, n));                  return(termp_under_pre(p, pair, m, n));
         else if (MDOC_HEAD == n->type)          } else if (MDOC_BLOCK == n->type) {
                 return(0);                  synopsis_pre(p, n);
         else if (MDOC_BLOCK == n->type)  
                 return(1);                  return(1);
           } else if (MDOC_HEAD == n->type)
                   return(0);
   
         return(termp_under_pre(p, pair, m, n));          return(termp_under_pre(p, pair, m, n));
 }  }
   
   
 /* ARGSUSED */  /* ARGSUSED */
 static void  
 termp_vt_post(DECL_ARGS)  
 {  
   
         if (MDOC_BLOCK != n->type)  
                 return;  
         if (n->next && MDOC_Vt == n->next->tok)  
                 term_newln(p);  
         else if (n->next)  
                 term_vspace(p);  
 }  
   
   
 /* ARGSUSED */  
 static int  static int
 termp_bold_pre(DECL_ARGS)  termp_bold_pre(DECL_ARGS)
 {  {
Line 1353  termp_bold_pre(DECL_ARGS)
Line 1396  termp_bold_pre(DECL_ARGS)
   
   
 /* ARGSUSED */  /* ARGSUSED */
 static void  static int
 termp_fd_post(DECL_ARGS)  termp_fd_pre(DECL_ARGS)
 {  {
   
         term_newln(p);          synopsis_pre(p, n);
           return(termp_bold_pre(p, pair, m, n));
 }  }
   
   
Line 1511  termp_ft_pre(DECL_ARGS)
Line 1555  termp_ft_pre(DECL_ARGS)
 {  {
   
         /* NB: MDOC_LINE does not effect this! */          /* NB: MDOC_LINE does not effect this! */
         if (SEC_SYNOPSIS == n->sec && n->prev)          synopsis_pre(p, n);
                 term_vspace(p);  
   
         term_fontpush(p, TERMFONT_UNDER);          term_fontpush(p, TERMFONT_UNDER);
         return(1);          return(1);
 }  }
Line 1525  termp_fn_pre(DECL_ARGS)
Line 1567  termp_fn_pre(DECL_ARGS)
 {  {
         const struct mdoc_node  *nn;          const struct mdoc_node  *nn;
   
         /* NB: MDOC_LINE has no effect on this macro! */          synopsis_pre(p, n);
         if (SEC_SYNOPSIS == n->sec) {  
                 if (n->prev && MDOC_Ft == n->prev->tok)  
                         term_newln(p);  
                 else if (n->prev)  
                         term_vspace(p);  
         }  
   
         term_fontpush(p, TERMFONT_BOLD);          term_fontpush(p, TERMFONT_BOLD);
         term_word(p, n->child->string);          term_word(p, n->child->string);
Line 1559  termp_fn_pre(DECL_ARGS)
Line 1595  termp_fn_pre(DECL_ARGS)
   
   
 /* ARGSUSED */  /* ARGSUSED */
 static void  
 termp_fn_post(DECL_ARGS)  
 {  
   
         /* NB: MDOC_LINE has no effect on this macro! */  
         if (SEC_SYNOPSIS == n->sec)  
                 term_newln(p);  
 }  
   
   
 /* ARGSUSED */  
 static int  static int
 termp_fa_pre(DECL_ARGS)  termp_fa_pre(DECL_ARGS)
 {  {
Line 1834  static int
Line 1859  static int
 termp_cd_pre(DECL_ARGS)  termp_cd_pre(DECL_ARGS)
 {  {
   
           synopsis_pre(p, n);
         term_fontpush(p, TERMFONT_BOLD);          term_fontpush(p, TERMFONT_BOLD);
         term_newln(p);  
         return(1);          return(1);
 }  }
   
Line 1845  static int
Line 1870  static int
 termp_in_pre(DECL_ARGS)  termp_in_pre(DECL_ARGS)
 {  {
   
         if (SEC_SYNOPSIS == n->sec && n->prev && MDOC_In != n->prev->tok)          synopsis_pre(p, n);
                 term_vspace(p);  
   
         if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags) {          if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags) {
                 term_fontpush(p, TERMFONT_BOLD);                  term_fontpush(p, TERMFONT_BOLD);
Line 1867  static void
Line 1891  static void
 termp_in_post(DECL_ARGS)  termp_in_post(DECL_ARGS)
 {  {
   
         if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags)          if (SEC_SYNOPSIS == n->sec)
                 term_fontpush(p, TERMFONT_BOLD);                  term_fontpush(p, TERMFONT_BOLD);
   
         p->flags |= TERMP_NOSPACE;          p->flags |= TERMP_NOSPACE;
         term_word(p, ">");          term_word(p, ">");
   
         if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags) {          if (SEC_SYNOPSIS == n->sec)
                 term_fontpop(p);                  term_fontpop(p);
                 term_newln(p);  
         }  
 }  }
   
   
Line 1987  termp_fo_pre(DECL_ARGS)
Line 2009  termp_fo_pre(DECL_ARGS)
 {  {
   
         if (MDOC_BLOCK == n->type) {          if (MDOC_BLOCK == n->type) {
                 /* NB: MDOC_LINE has no effect on this macro! */                  synopsis_pre(p, n);
                 if (SEC_SYNOPSIS != n->sec)  
                         return(1);  
                 if (n->prev && MDOC_Ft == n->prev->tok)  
                         term_newln(p);  
                 else if (n->prev)  
                         term_vspace(p);  
                 return(1);                  return(1);
         } else if (MDOC_BODY == n->type) {          } else if (MDOC_BODY == n->type) {
                 p->flags |= TERMP_NOSPACE;                  p->flags |= TERMP_NOSPACE;
Line 2017  static void
Line 2033  static void
 termp_fo_post(DECL_ARGS)  termp_fo_post(DECL_ARGS)
 {  {
   
         if (MDOC_BLOCK == n->type) {          if (MDOC_BODY != n->type)
                 /* NB: MDOC_LINE has no effect on this macro! */                  return;
                 if (SEC_SYNOPSIS == n->sec)  
                         term_newln(p);          p->flags |= TERMP_NOSPACE;
         } else if (MDOC_BODY == n->type) {          term_word(p, ")");
   
           if (SEC_SYNOPSIS == n->sec) {
                 p->flags |= TERMP_NOSPACE;                  p->flags |= TERMP_NOSPACE;
                 term_word(p, ")");                  term_word(p, ";");
                 if (SEC_SYNOPSIS == n->sec) {  
                         p->flags |= TERMP_NOSPACE;  
                         term_word(p, ";");  
                 }  
         }          }
 }  }
   

Legend:
Removed from v.1.142  
changed lines
  Added in v.1.143

CVSweb