[BACK]Return to term.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/term.c between version 1.23 and 1.25

version 1.23, 2009/02/25 23:18:50 version 1.25, 2009/02/26 16:08:11
Line 17 
Line 17 
  * PERFORMANCE OF THIS SOFTWARE.   * PERFORMANCE OF THIS SOFTWARE.
  */   */
 #include <assert.h>  #include <assert.h>
   #include <ctype.h>
 #include <err.h>  #include <err.h>
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
Line 276  const struct termact *termacts = __termacts;
Line 277  const struct termact *termacts = __termacts;
 static size_t  static size_t
 arg_width(const struct mdoc_arg *arg)  arg_width(const struct mdoc_arg *arg)
 {  {
           size_t           len, i, v;
   
         /* TODO */          /* TODO */
         assert(*arg->value);          assert(*arg->value);
           if (0 == strcmp(*arg->value, "indent"))
                   return(INDENT);
           if (0 == strcmp(*arg->value, "indent-two"))
                   return(INDENT * 2);
   
           len = strlen(*arg->value);
           assert(len > 0);
   
           for (i = 0; i < len - 1; i++)
                   if ( ! isdigit((int)(*arg->value)[i]))
                           break;
   
           if (i == len - 1) {
                   if ('n' == (*arg->value)[len - 1]) {
                           v = (size_t)atoi(*arg->value);
                           return(v);
                   }
   
           }
         return(strlen(*arg->value));          return(strlen(*arg->value));
 }  }
   
Line 293  arg_offset(const struct mdoc_arg *arg)
Line 314  arg_offset(const struct mdoc_arg *arg)
                 return(INDENT);                  return(INDENT);
         if (0 == strcmp(*arg->value, "indent-two"))          if (0 == strcmp(*arg->value, "indent-two"))
                 return(INDENT * 2);                  return(INDENT * 2);
   
         return(strlen(*arg->value));          return(strlen(*arg->value));
 }  }
   
Line 381  termp_it_pre(DECL_ARGS)
Line 401  termp_it_pre(DECL_ARGS)
   
         /* Get our list type. */          /* Get our list type. */
   
         for (i = 0; i < (int)bl->argc; i++)          for (type = -1, i = 0; i < (int)bl->argc; i++)
                 switch (bl->argv[i].arg) {                  switch (bl->argv[i].arg) {
                 case (MDOC_Bullet):                  case (MDOC_Bullet):
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
Line 391  termp_it_pre(DECL_ARGS)
Line 411  termp_it_pre(DECL_ARGS)
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (MDOC_Hyphen):                  case (MDOC_Hyphen):
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (MDOC_Item):  
                         /* FALLTHROUGH */  
                 case (MDOC_Tag):                  case (MDOC_Tag):
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (MDOC_Ohang):                  case (MDOC_Ohang):
                         type = bl->argv[i].arg;                          type = bl->argv[i].arg;
                         i = (int)bl->argc;                          i = (int)bl->argc;
                         break;                          break;
                 case (MDOC_Inset):                  default:
                         /* FALLTHROUGH */  
                 case (MDOC_Hang):  
                         /* FALLTHROUGH */  
                 case (MDOC_Diag):  
                         /* FALLTHROUGH */  
                 case (MDOC_Column):  
                         errx(1, "list type not supported");                          errx(1, "list type not supported");
                         /* NOTREACHED */                          /* NOTREACHED */
                 default:  
                         break;  
                 }                  }
   
           assert(-1 != type);
   
         /* Save our existing (inherited) margin and offset. */          /* Save our existing (inherited) margin and offset. */
   
         pair->offset = p->offset;          pair->offset = p->offset;
Line 419  termp_it_pre(DECL_ARGS)
Line 431  termp_it_pre(DECL_ARGS)
   
         /* Get list width and offset. */          /* Get list width and offset. */
   
         /* FIXME: auto-size. */  
         i = arg_getattr(MDOC_Width, bl->argc, bl->argv);          i = arg_getattr(MDOC_Width, bl->argc, bl->argv);
         width = i >= 0 ? arg_width(&bl->argv[i]) : 0;          width = i >= 0 ? arg_width(&bl->argv[i]) : 0;
   
Line 439  termp_it_pre(DECL_ARGS)
Line 450  termp_it_pre(DECL_ARGS)
                 width = width > 6 ? width : 6;                  width = width > 6 ? width : 6;
                 break;                  break;
         case (MDOC_Tag):          case (MDOC_Tag):
                   /* FIXME: auto-size. */
                 if (0 == width)                  if (0 == width)
                         errx(1, "need non-zero -width");                          errx(1, "need non-zero -width");
                 break;                  break;
Line 465  termp_it_pre(DECL_ARGS)
Line 477  termp_it_pre(DECL_ARGS)
                 else if (MDOC_BODY == node->type)                  else if (MDOC_BODY == node->type)
                         p->flags |= TERMP_NOLPAD;                          p->flags |= TERMP_NOLPAD;
                 break;                  break;
         case (MDOC_Ohang):          default:
                 break;                  break;
         }          }
   
Line 475  termp_it_pre(DECL_ARGS)
Line 487  termp_it_pre(DECL_ARGS)
          */           */
   
         tp = NULL;          tp = NULL;
   
         if (MDOC_HEAD == node->type) {          if (MDOC_HEAD == node->type) {
                 if (arg_hasattr(MDOC_Bullet, bl->argc, bl->argv))                  if (arg_hasattr(MDOC_Bullet, bl->argc, bl->argv))
                         tp = "\\[bu]";                          tp = "\\[bu]";
Line 488  termp_it_pre(DECL_ARGS)
Line 501  termp_it_pre(DECL_ARGS)
                 }                  }
                 if (arg_hasattr(MDOC_Hyphen, bl->argc, bl->argv))                  if (arg_hasattr(MDOC_Hyphen, bl->argc, bl->argv))
                         tp = "\\-";                          tp = "\\-";
                 if (arg_hasattr(MDOC_Item, bl->argc, bl->argv))  
                         tp = "";  
         }          }
   
         /* Margin control. */          /* Margin control. */
Line 505  termp_it_pre(DECL_ARGS)
Line 516  termp_it_pre(DECL_ARGS)
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_Hyphen):          case (MDOC_Hyphen):
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_Item):  
                 /* FALLTHROUGH */  
         case (MDOC_Tag):          case (MDOC_Tag):
                 if (MDOC_HEAD == node->type)                  if (MDOC_HEAD == node->type)
                         p->rmargin = p->offset + width;                          p->rmargin = p->offset + width;
                 else if (MDOC_BODY == node->type)                  else if (MDOC_BODY == node->type)
                         p->offset += width;                          p->offset += width;
                 break;                  break;
         case (MDOC_Ohang):          default:
                 break;                  break;
         }          }
   
         if (NULL == tp)          if (NULL == tp)
                 return(1);                  return(1);
   
         /* XXX - ignoring children. */  
   
         word(p, tp);          word(p, tp);
         return(0);          return(0);

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.25

CVSweb