[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.279 and 1.283

version 1.279, 2014/08/17 16:51:55 version 1.283, 2014/10/13 22:00:47
Line 65  static void   synopsis_pre(struct termp *,
Line 65  static void   synopsis_pre(struct termp *,
   
 static  void      termp____post(DECL_ARGS);  static  void      termp____post(DECL_ARGS);
 static  void      termp__t_post(DECL_ARGS);  static  void      termp__t_post(DECL_ARGS);
 static  void      termp_an_post(DECL_ARGS);  
 static  void      termp_bd_post(DECL_ARGS);  static  void      termp_bd_post(DECL_ARGS);
 static  void      termp_bk_post(DECL_ARGS);  static  void      termp_bk_post(DECL_ARGS);
 static  void      termp_bl_post(DECL_ARGS);  static  void      termp_bl_post(DECL_ARGS);
Line 138  static const struct termact termacts[MDOC_MAX] = {
Line 137  static const struct termact termacts[MDOC_MAX] = {
         { NULL, NULL }, /* El */          { NULL, NULL }, /* El */
         { termp_it_pre, termp_it_post }, /* It */          { termp_it_pre, termp_it_post }, /* It */
         { termp_under_pre, NULL }, /* Ad */          { termp_under_pre, NULL }, /* Ad */
         { termp_an_pre, termp_an_post }, /* An */          { termp_an_pre, NULL }, /* An */
         { termp_under_pre, NULL }, /* Ar */          { termp_under_pre, NULL }, /* Ar */
         { termp_cd_pre, NULL }, /* Cd */          { termp_cd_pre, NULL }, /* Cd */
         { termp_bold_pre, NULL }, /* Cm */          { termp_bold_pre, NULL }, /* Cm */
Line 252  static const struct termact termacts[MDOC_MAX] = {
Line 251  static const struct termact termacts[MDOC_MAX] = {
 void  void
 terminal_mdoc(void *arg, const struct mdoc *mdoc)  terminal_mdoc(void *arg, const struct mdoc *mdoc)
 {  {
         const struct mdoc_node  *n;  
         const struct mdoc_meta  *meta;          const struct mdoc_meta  *meta;
           struct mdoc_node        *n;
         struct termp            *p;          struct termp            *p;
   
         p = (struct termp *)arg;          p = (struct termp *)arg;
   
         if (0 == p->defindent)  
                 p->defindent = 5;  
   
         p->overstep = 0;          p->overstep = 0;
         p->maxrmargin = p->defrmargin;          p->rmargin = p->maxrmargin = p->defrmargin;
         p->tabwidth = term_len(p, 5);          p->tabwidth = term_len(p, 5);
   
         if (NULL == p->symtab)          if (NULL == p->symtab)
                 p->symtab = mchars_alloc();                  p->symtab = mchars_alloc();
   
         n = mdoc_node(mdoc);          n = mdoc_node(mdoc)->child;
         meta = mdoc_meta(mdoc);          meta = mdoc_meta(mdoc);
   
         term_begin(p, print_mdoc_head, print_mdoc_foot, meta);          if (p->synopsisonly) {
                   while (n != NULL) {
         if (n->child) {                          if (n->tok == MDOC_Sh && n->sec == SEC_SYNOPSIS) {
                 if (MDOC_Sh != n->child->tok)                                  if (n->child->next->child != NULL)
                         term_vspace(p);                                          print_mdoc_nodelist(p, NULL,
                 print_mdoc_nodelist(p, NULL, meta, n->child);                                              meta, n->child->next->child);
                                   term_newln(p);
                                   break;
                           }
                           n = n->next;
                   }
           } else {
                   if (p->defindent == 0)
                           p->defindent = 5;
                   term_begin(p, print_mdoc_head, print_mdoc_foot, meta);
                   if (n != NULL) {
                           if (n->tok != MDOC_Sh)
                                   term_vspace(p);
                           print_mdoc_nodelist(p, NULL, meta, n);
                   }
                   term_end(p);
         }          }
   
         term_end(p);  
 }  }
   
 static void  static void
Line 463  print_mdoc_head(struct termp *p, const void *arg)
Line 472  print_mdoc_head(struct termp *p, const void *arg)
          * switches on the manual section.           * switches on the manual section.
          */           */
   
         p->offset = 0;  
         p->rmargin = p->maxrmargin;  
   
         assert(meta->vol);          assert(meta->vol);
         if (NULL == meta->arch)          if (NULL == meta->arch)
                 volume = mandoc_strdup(meta->vol);                  volume = mandoc_strdup(meta->vol);
Line 535  a2width(const struct termp *p, const char *v)
Line 541  a2width(const struct termp *p, const char *v)
         struct roffsu    su;          struct roffsu    su;
   
         assert(v);          assert(v);
         if ( ! a2roffsu(v, &su, SCALE_MAX))          if ( ! a2roffsu(v, &su, SCALE_MAX)) {
                 SCALE_HS_INIT(&su, term_strlen(p, v));                  SCALE_HS_INIT(&su, term_strlen(p, v));
                   su.scale /= term_strlen(p, "0");
           }
   
         return(term_hspan(p, &su));          return(term_hspan(p, &su));
 }  }
Line 554  a2offs(const struct termp *p, const char *v)
Line 562  a2offs(const struct termp *p, const char *v)
                 return(term_len(p, p->defindent + 1));                  return(term_len(p, p->defindent + 1));
         else if (0 == strcmp(v, "indent-two"))          else if (0 == strcmp(v, "indent-two"))
                 return(term_len(p, (p->defindent + 1) * 2));                  return(term_len(p, (p->defindent + 1) * 2));
         else if ( ! a2roffsu(v, &su, SCALE_MAX))          else if ( ! a2roffsu(v, &su, SCALE_MAX)) {
                 SCALE_HS_INIT(&su, term_strlen(p, v));                  SCALE_HS_INIT(&su, term_strlen(p, v));
                   su.scale /= term_strlen(p, "0");
           }
   
         return(term_hspan(p, &su));          return(term_hspan(p, &su));
 }  }
Line 1075  termp_fl_pre(DECL_ARGS)
Line 1085  termp_fl_pre(DECL_ARGS)
         term_fontpush(p, TERMFONT_BOLD);          term_fontpush(p, TERMFONT_BOLD);
         term_word(p, "\\-");          term_word(p, "\\-");
   
         if (n->child)          if ( ! (n->nchild == 0 &&
               (n->next == NULL ||
                n->next->type == MDOC_TEXT ||
                n->next->flags & MDOC_LINE)))
                 p->flags |= TERMP_NOSPACE;                  p->flags |= TERMP_NOSPACE;
         else if (n->next && n->next->line == n->line)  
                 p->flags |= TERMP_NOSPACE;  
   
         return(1);          return(1);
 }  }
Line 1098  static int
Line 1109  static int
 termp_an_pre(DECL_ARGS)  termp_an_pre(DECL_ARGS)
 {  {
   
         if (NULL == n->child)          if (n->norm->An.auth == AUTH_split) {
                 return(1);  
   
         /*  
          * If not in the AUTHORS section, `An -split' will cause  
          * newlines to occur before the author name.  If in the AUTHORS  
          * section, by default, the first `An' invocation is nosplit,  
          * then all subsequent ones, regardless of whether interspersed  
          * with other macros/text, are split.  -split, in this case,  
          * will override the condition of the implied first -nosplit.  
          */  
   
         if (n->sec == SEC_AUTHORS) {  
                 if ( ! (TERMP_ANPREC & p->flags)) {  
                         if (TERMP_SPLIT & p->flags)  
                                 term_newln(p);  
                         return(1);  
                 }  
                 if (TERMP_NOSPLIT & p->flags)  
                         return(1);  
                 term_newln(p);  
                 return(1);  
         }  
   
         if (TERMP_SPLIT & p->flags)  
                 term_newln(p);  
   
         return(1);  
 }  
   
 static void  
 termp_an_post(DECL_ARGS)  
 {  
   
         if (n->child) {  
                 if (SEC_AUTHORS == n->sec)  
                         p->flags |= TERMP_ANPREC;  
                 return;  
         }  
   
         if (AUTH_split == n->norm->An.auth) {  
                 p->flags &= ~TERMP_NOSPLIT;                  p->flags &= ~TERMP_NOSPLIT;
                 p->flags |= TERMP_SPLIT;                  p->flags |= TERMP_SPLIT;
         } else if (AUTH_nosplit == n->norm->An.auth) {                  return(0);
           }
           if (n->norm->An.auth == AUTH_nosplit) {
                 p->flags &= ~TERMP_SPLIT;                  p->flags &= ~TERMP_SPLIT;
                 p->flags |= TERMP_NOSPLIT;                  p->flags |= TERMP_NOSPLIT;
                   return(0);
         }          }
   
           if (n->child == NULL)
                   return(0);
   
           if (p->flags & TERMP_SPLIT)
                   term_newln(p);
   
           if (n->sec == SEC_AUTHORS && ! (p->flags & TERMP_NOSPLIT))
                   p->flags |= TERMP_SPLIT;
   
           return(1);
 }  }
   
 static int  static int

Legend:
Removed from v.1.279  
changed lines
  Added in v.1.283

CVSweb