[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.286 and 1.289

version 1.286, 2014/10/20 15:50:24 version 1.289, 2014/11/10 21:56:43
Line 51  struct termact {
Line 51  struct termact {
   
 static  size_t    a2width(const struct termp *, const char *);  static  size_t    a2width(const struct termp *, const char *);
 static  size_t    a2height(const struct termp *, const char *);  static  size_t    a2height(const struct termp *, const char *);
 static  size_t    a2offs(const struct termp *, const char *);  
   
 static  void      print_bvspace(struct termp *,  static  void      print_bvspace(struct termp *,
                         const struct mdoc_node *,                          const struct mdoc_node *,
Line 261  terminal_mdoc(void *arg, const struct mdoc *mdoc)
Line 260  terminal_mdoc(void *arg, const struct mdoc *mdoc)
         p->rmargin = 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)  
                 p->symtab = mchars_alloc();  
   
         n = mdoc_node(mdoc)->child;          n = mdoc_node(mdoc)->child;
         meta = mdoc_meta(mdoc);          meta = mdoc_meta(mdoc);
   
Line 553  a2width(const struct termp *p, const char *v)
Line 549  a2width(const struct termp *p, const char *v)
         return(term_hspan(p, &su));          return(term_hspan(p, &su));
 }  }
   
 static size_t  
 a2offs(const struct termp *p, const char *v)  
 {  
         struct roffsu    su;  
   
         if ('\0' == *v)  
                 return(0);  
         else if (0 == strcmp(v, "left"))  
                 return(0);  
         else if (0 == strcmp(v, "indent"))  
                 return(term_len(p, p->defindent + 1));  
         else if (0 == strcmp(v, "indent-two"))  
                 return(term_len(p, (p->defindent + 1) * 2));  
         else if ( ! a2roffsu(v, &su, SCALE_MAX)) {  
                 SCALE_HS_INIT(&su, term_strlen(p, v));  
                 su.scale /= term_strlen(p, "0");  
         }  
   
         return(term_hspan(p, &su));  
 }  
   
 /*  /*
  * Determine how much space to print out before block elements of `It'   * Determine how much space to print out before block elements of `It'
  * (and thus `Bl') and `Bd'.  And then go ahead and print that space,   * (and thus `Bl') and `Bd'.  And then go ahead and print that space,
Line 597  print_bvspace(struct termp *p,
Line 572  print_bvspace(struct termp *p,
   
         /* Do not vspace directly after Ss/Sh. */          /* Do not vspace directly after Ss/Sh. */
   
         for (nn = n; nn; nn = nn->parent) {          nn = n;
                 if (MDOC_BLOCK != nn->type)          while (nn->prev == NULL) {
                         continue;                  do {
                 if (MDOC_Ss == nn->tok)                          nn = nn->parent;
                           if (nn->type == MDOC_ROOT)
                                   return;
                   } while (nn->type != MDOC_BLOCK);
                   if (nn->tok == MDOC_Sh || nn->tok == MDOC_Ss)
                         return;                          return;
                 if (MDOC_Sh == nn->tok)                  if (nn->tok == MDOC_It &&
                         return;                      nn->parent->parent->norm->Bl.type != LIST_item)
                 if (NULL == nn->prev)                          break;
                         continue;  
                 break;  
         }          }
   
         /* A `-column' does not assert vspace within the list. */          /* A `-column' does not assert vspace within the list. */
Line 662  termp_it_pre(DECL_ARGS)
Line 639  termp_it_pre(DECL_ARGS)
         width = offset = 0;          width = offset = 0;
   
         if (bl->norm->Bl.offs)          if (bl->norm->Bl.offs)
                 offset = a2offs(p, bl->norm->Bl.offs);                  offset = a2width(p, bl->norm->Bl.offs);
   
         switch (type) {          switch (type) {
         case LIST_column:          case LIST_column:
Line 1584  termp_bd_pre(DECL_ARGS)
Line 1561  termp_bd_pre(DECL_ARGS)
         } else if (MDOC_HEAD == n->type)          } else if (MDOC_HEAD == n->type)
                 return(0);                  return(0);
   
         if (n->norm->Bd.offs)          /* Handle the -offset argument. */
                 p->offset += a2offs(p, n->norm->Bd.offs);  
           if (n->norm->Bd.offs == NULL ||
               ! strcmp(n->norm->Bd.offs, "left"))
                   /* nothing */;
           else if ( ! strcmp(n->norm->Bd.offs, "indent"))
                   p->offset += term_len(p, p->defindent + 1);
           else if ( ! strcmp(n->norm->Bd.offs, "indent-two"))
                   p->offset += term_len(p, (p->defindent + 1) * 2);
           else
                   p->offset += a2width(p, n->norm->Bd.offs);
   
         /*          /*
          * If -ragged or -filled are specified, the block does nothing           * If -ragged or -filled are specified, the block does nothing

Legend:
Removed from v.1.286  
changed lines
  Added in v.1.289

CVSweb