[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.147 and 1.149

version 1.147, 2010/06/12 10:09:19 version 1.149, 2010/06/12 11:58:22
Line 54  struct termact {
Line 54  struct termact {
   
 static  size_t    a2width(const struct mdoc_argv *, int);  static  size_t    a2width(const struct mdoc_argv *, int);
 static  size_t    a2height(const struct mdoc_node *);  static  size_t    a2height(const struct mdoc_node *);
 static  size_t    a2offs(const struct mdoc_argv *);  static  size_t    a2offs(const char *);
   
 static  int       arg_hasattr(int, const struct mdoc_node *);  static  int       arg_hasattr(int, const struct mdoc_node *);
 static  int       arg_getattrs(const int *, int *, size_t,  static  int       arg_getattrs(const int *, int *, size_t,
Line 489  a2width(const struct mdoc_argv *arg, int pos)
Line 489  a2width(const struct mdoc_argv *arg, int pos)
   
   
 static size_t  static size_t
 a2offs(const struct mdoc_argv *arg)  a2offs(const char *v)
 {  {
         struct roffsu    su;          struct roffsu    su;
   
         if ('\0' == arg->value[0][0])          if ('\0' == *v)
                 return(0);                  return(0);
         else if (0 == strcmp(arg->value[0], "left"))          else if (0 == strcmp(v, "left"))
                 return(0);                  return(0);
         else if (0 == strcmp(arg->value[0], "indent"))          else if (0 == strcmp(v, "indent"))
                 return(INDENT + 1);                  return(INDENT + 1);
         else if (0 == strcmp(arg->value[0], "indent-two"))          else if (0 == strcmp(v, "indent-two"))
                 return((INDENT + 1) * 2);                  return((INDENT + 1) * 2);
         else if ( ! a2roffsu(arg->value[0], &su, SCALE_MAX))          else if ( ! a2roffsu(v, &su, SCALE_MAX))
                 SCALE_HS_INIT(&su, strlen(arg->value[0]));                  SCALE_HS_INIT(&su, strlen(v));
   
         return(term_hspan(&su));          return(term_hspan(&su));
 }  }
Line 570  print_bvspace(struct termp *p, 
Line 570  print_bvspace(struct termp *p, 
 {  {
         const struct mdoc_node  *nn;          const struct mdoc_node  *nn;
   
           /* FIXME: MDOC_Bd == bl->tok && bl->data.Bd.comp */
         term_newln(p);          term_newln(p);
         if (arg_hasattr(MDOC_Compact, bl))          if (arg_hasattr(MDOC_Compact, bl))
                 return;                  return;
Line 590  print_bvspace(struct termp *p, 
Line 591  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 661  termp_it_pre(DECL_ARGS)
Line 662  termp_it_pre(DECL_ARGS)
   
         arg_getattrs(keys, vals, 3, bl);          arg_getattrs(keys, vals, 3, 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 672  termp_it_pre(DECL_ARGS)
Line 673  termp_it_pre(DECL_ARGS)
         width = offset = 0;          width = offset = 0;
   
         if (vals[1] >= 0)          if (vals[1] >= 0)
                 offset = a2offs(&bl->args->argv[vals[1]]);                  offset = a2offs(bl->args->argv[vals[1]].value[0]);
   
         switch (type) {          switch (type) {
         case (LIST_column):          case (LIST_column):
Line 989  termp_it_post(DECL_ARGS)
Line 990  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):
Line 1602  static int
Line 1603  static int
 termp_bd_pre(DECL_ARGS)  termp_bd_pre(DECL_ARGS)
 {  {
         size_t                   tabwidth;          size_t                   tabwidth;
         int                      i;  
         size_t                   rm, rmax;          size_t                   rm, rmax;
         const struct mdoc_node  *nn;          const struct mdoc_node  *nn;
   
Line 1612  termp_bd_pre(DECL_ARGS)
Line 1612  termp_bd_pre(DECL_ARGS)
         } else if (MDOC_HEAD == n->type)          } else if (MDOC_HEAD == n->type)
                 return(0);                  return(0);
   
         nn = n->parent;          if (n->data.Bd.offs)
                   p->offset += a2offs(n->data.Bd.offs);
   
         if (-1 != (i = arg_getattr(MDOC_Offset, nn)))  
                 p->offset += a2offs(&nn->args->argv[i]);  
   
         /*          /*
          * If -ragged or -filled are specified, the block does nothing           * If -ragged or -filled are specified, the block does nothing
          * but change the indentation.  If -unfilled or -literal are           * but change the indentation.  If -unfilled or -literal are
Line 1625  termp_bd_pre(DECL_ARGS)
Line 1623  termp_bd_pre(DECL_ARGS)
          * lines are allowed.           * lines are allowed.
          */           */
   
         if (DISP_literal != n->data.disp &&          if (DISP_literal != n->data.Bd.type &&
                         DISP_unfilled != n->data.disp)                          DISP_unfilled != n->data.Bd.type)
                 return(1);                  return(1);
   
         tabwidth = p->tabwidth;          tabwidth = p->tabwidth;
Line 1663  termp_bd_post(DECL_ARGS)
Line 1661  termp_bd_post(DECL_ARGS)
         rm = p->rmargin;          rm = p->rmargin;
         rmax = p->maxrmargin;          rmax = p->maxrmargin;
   
         if (DISP_literal == n->data.disp ||          if (DISP_literal == n->data.Bd.type ||
                         DISP_unfilled == n->data.disp)                          DISP_unfilled == n->data.Bd.type)
                 p->rmargin = p->maxrmargin = TERM_MAXMARGIN;                  p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
   
         p->flags |= TERMP_NOSPACE;          p->flags |= TERMP_NOSPACE;

Legend:
Removed from v.1.147  
changed lines
  Added in v.1.149

CVSweb