[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.148 and 1.154

version 1.148, 2010/06/12 11:21:44 version 1.154, 2010/06/13 21:41:58
Line 52  struct termact {
Line 52  struct termact {
         void    (*post)(DECL_ARGS);          void    (*post)(DECL_ARGS);
 };  };
   
 static  size_t    a2width(const struct mdoc_argv *, int);  static  size_t    a2width(const char *);
 static  size_t    a2height(const struct mdoc_node *);  static  size_t    a2height(const struct mdoc_node *);
 static  size_t    a2offs(const char *);  static  size_t    a2offs(const char *);
   
Line 476  a2height(const struct mdoc_node *n)
Line 476  a2height(const struct mdoc_node *n)
   
   
 static size_t  static size_t
 a2width(const struct mdoc_argv *arg, int pos)  a2width(const char *v)
 {  {
         struct roffsu    su;          struct roffsu    su;
   
         assert(arg->value[pos]);          assert(v);
         if ( ! a2roffsu(arg->value[pos], &su, SCALE_MAX))          if ( ! a2roffsu(v, &su, SCALE_MAX))
                 SCALE_HS_INIT(&su, strlen(arg->value[pos]));                  SCALE_HS_INIT(&su, strlen(v));
   
         return(term_hspan(&su));          return(term_hspan(&su));
 }  }
Line 571  print_bvspace(struct termp *p, 
Line 571  print_bvspace(struct termp *p, 
         const struct mdoc_node  *nn;          const struct mdoc_node  *nn;
   
         term_newln(p);          term_newln(p);
         if (arg_hasattr(MDOC_Compact, bl))  
           if (MDOC_Bd == bl->tok && bl->data.Bd.comp)
                 return;                  return;
           if (MDOC_Bl == bl->tok && bl->data.Bl.comp)
                   return;
   
         /* Do not vspace directly after Ss/Sh. */          /* Do not vspace directly after Ss/Sh. */
   
Line 590  print_bvspace(struct termp *p, 
Line 593  print_bvspace(struct termp *p, 
   
         /* A `-column' does not assert vspace within the list. */          /* A `-column' does not assert vspace within the list. */
   
         if (MDOC_Bl == bl->tok && LIST_column == bl->data.list)          if (MDOC_Bl == bl->tok && LIST_column == bl->data.Bl.type)
                 if (n->prev && MDOC_It == n->prev->tok)                  if (n->prev && MDOC_It == n->prev->tok)
                         return;                          return;
   
         /* A `-diag' without body does not vspace. */          /* A `-diag' without body does not vspace. */
   
         if (MDOC_Bl == bl->tok && LIST_diag == bl->data.list)          if (MDOC_Bl == bl->tok && LIST_diag == bl->data.Bl.type)
                 if (n->prev && MDOC_It == n->prev->tok) {                  if (n->prev && MDOC_It == n->prev->tok) {
                         assert(n->prev->body);                          assert(n->prev->body);
                         if (NULL == n->prev->body->child)                          if (NULL == n->prev->body->child)
Line 640  termp_it_pre(DECL_ARGS)
Line 643  termp_it_pre(DECL_ARGS)
 {  {
         const struct mdoc_node *bl, *nn;          const struct mdoc_node *bl, *nn;
         char                    buf[7];          char                    buf[7];
         int                     i, keys[3], vals[3];          int                     i, keys[2], vals[2];
         size_t                  width, offset, ncols, dcol;          size_t                  width, offset, ncols, dcol;
         enum mdoc_list          type;          enum mdoc_list          type;
   
Line 654  termp_it_pre(DECL_ARGS)
Line 657  termp_it_pre(DECL_ARGS)
         /* Get list width, offset, and list type from argument list. */          /* Get list width, offset, and list type from argument list. */
   
         keys[0] = MDOC_Width;          keys[0] = MDOC_Width;
         keys[1] = MDOC_Offset;          keys[1] = MDOC_Column;
         keys[2] = MDOC_Column;  
   
         vals[0] = vals[1] = vals[2] = -1;          vals[0] = vals[1] = -1;
   
         arg_getattrs(keys, vals, 3, bl);          arg_getattrs(keys, vals, 2, bl);
   
         type = bl->data.list;          type = bl->data.Bl.type;
   
         /*          /*
          * First calculate width and offset.  This is pretty easy unless           * First calculate width and offset.  This is pretty easy unless
Line 671  termp_it_pre(DECL_ARGS)
Line 673  termp_it_pre(DECL_ARGS)
   
         width = offset = 0;          width = offset = 0;
   
         if (vals[1] >= 0)          if (bl->data.Bl.offs)
                 offset = a2offs(bl->args->argv[vals[1]].value[0]);                  offset = a2offs(bl->data.Bl.offs);
   
   
         switch (type) {          switch (type) {
         case (LIST_column):          case (LIST_column):
                 if (MDOC_HEAD == n->type)                  if (MDOC_HEAD == n->type)
Line 687  termp_it_pre(DECL_ARGS)
Line 690  termp_it_pre(DECL_ARGS)
                  *   column.                   *   column.
                  * - For more than 5 columns, add only one column.                   * - For more than 5 columns, add only one column.
                  */                   */
                 ncols = bl->args->argv[vals[2]].sz;                  ncols = bl->args->argv[vals[1]].sz;
                 /* LINTED */                  /* LINTED */
                 dcol = ncols < 5 ? 4 : ncols == 5 ? 3 : 1;                  dcol = ncols < 5 ? 4 : ncols == 5 ? 3 : 1;
   
Line 700  termp_it_pre(DECL_ARGS)
Line 703  termp_it_pre(DECL_ARGS)
                                 nn->prev && i < (int)ncols;                                  nn->prev && i < (int)ncols;
                                 nn = nn->prev, i++)                                  nn = nn->prev, i++)
                         offset += dcol + a2width                          offset += dcol + a2width
                                 (&bl->args->argv[vals[2]], i);                                  (bl->args->argv[vals[1]].value[i]);
   
   
                 /*                  /*
Line 716  termp_it_pre(DECL_ARGS)
Line 719  termp_it_pre(DECL_ARGS)
                  * Use the declared column widths, extended as explained                   * Use the declared column widths, extended as explained
                  * in the preceding paragraph.                   * in the preceding paragraph.
                  */                   */
                 width = a2width(&bl->args->argv[vals[2]], i) + dcol;                  width = a2width
                           (bl->args->argv[vals[1]].value[i]) + dcol;
                 break;                  break;
         default:          default:
                 if (vals[0] < 0)                  if (NULL == bl->data.Bl.width)
                         break;                          break;
   
                 /*                  /*
Line 727  termp_it_pre(DECL_ARGS)
Line 731  termp_it_pre(DECL_ARGS)
                  * number for buffering single arguments.  See the above                   * number for buffering single arguments.  See the above
                  * handling for column for how this changes.                   * handling for column for how this changes.
                  */                   */
                 width = a2width(&bl->args->argv[vals[0]], 0) + 2;                  assert(bl->data.Bl.width);
                   width = a2width(bl->data.Bl.width) + 2;
                 break;                  break;
         }          }
   
Line 989  termp_it_post(DECL_ARGS)
Line 994  termp_it_post(DECL_ARGS)
         if (MDOC_BLOCK == n->type)          if (MDOC_BLOCK == n->type)
                 return;                  return;
   
         type = n->parent->parent->parent->data.list;          type = n->parent->parent->parent->data.Bl.type;
   
         switch (type) {          switch (type) {
         case (LIST_item):          case (LIST_item):

Legend:
Removed from v.1.148  
changed lines
  Added in v.1.154

CVSweb