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

Diff for /mandoc/out.c between version 1.44 and 1.48

version 1.44, 2012/05/27 17:54:54 version 1.48, 2014/04/20 16:46:05
Line 28 
Line 28 
 #include <string.h>  #include <string.h>
 #include <time.h>  #include <time.h>
   
   #include "mandoc_aux.h"
 #include "mandoc.h"  #include "mandoc.h"
 #include "out.h"  #include "out.h"
   
 static  void    tblcalc_data(struct rofftbl *, struct roffcol *,  static  void    tblcalc_data(struct rofftbl *, struct roffcol *,
                         const struct tbl *, const struct tbl_dat *);                          const struct tbl_opts *, const struct tbl_dat *);
 static  void    tblcalc_literal(struct rofftbl *, struct roffcol *,  static  void    tblcalc_literal(struct rofftbl *, struct roffcol *,
                         const struct tbl_dat *);                          const struct tbl_dat *);
 static  void    tblcalc_number(struct rofftbl *, struct roffcol *,  static  void    tblcalc_number(struct rofftbl *, struct roffcol *,
                         const struct tbl *, const struct tbl_dat *);                          const struct tbl_opts *, const struct tbl_dat *);
   
 /*  
   /*
  * Convert a `scaling unit' to a consistent form, or fail.  Scaling   * Convert a `scaling unit' to a consistent form, or fail.  Scaling
  * units are documented in groff.7, mdoc.7, man.7.   * units are documented in groff.7, mdoc.7, man.7.
  */   */
Line 55  a2roffsu(const char *src, struct roffsu *dst, enum rof
Line 57  a2roffsu(const char *src, struct roffsu *dst, enum rof
         i = hasd = 0;          i = hasd = 0;
   
         switch (*src) {          switch (*src) {
         case ('+'):          case '+':
                 src++;                  src++;
                 break;                  break;
         case ('-'):          case '-':
                 buf[i++] = *src++;                  buf[i++] = *src++;
                 break;                  break;
         default:          default:
Line 86  a2roffsu(const char *src, struct roffsu *dst, enum rof
Line 88  a2roffsu(const char *src, struct roffsu *dst, enum rof
         buf[i] = '\0';          buf[i] = '\0';
   
         switch (*src) {          switch (*src) {
         case ('c'):          case 'c':
                 unit = SCALE_CM;                  unit = SCALE_CM;
                 break;                  break;
         case ('i'):          case 'i':
                 unit = SCALE_IN;                  unit = SCALE_IN;
                 break;                  break;
         case ('P'):          case 'P':
                 unit = SCALE_PC;                  unit = SCALE_PC;
                 break;                  break;
         case ('p'):          case 'p':
                 unit = SCALE_PT;                  unit = SCALE_PT;
                 break;                  break;
         case ('f'):          case 'f':
                 unit = SCALE_FS;                  unit = SCALE_FS;
                 break;                  break;
         case ('v'):          case 'v':
                 unit = SCALE_VS;                  unit = SCALE_VS;
                 break;                  break;
         case ('m'):          case 'm':
                 unit = SCALE_EM;                  unit = SCALE_EM;
                 break;                  break;
         case ('\0'):          case '\0':
                 if (SCALE_MAX == def)                  if (SCALE_MAX == def)
                         return(0);                          return(0);
                 unit = SCALE_BU;                  unit = SCALE_BU;
                 break;                  break;
         case ('u'):          case 'u':
                 unit = SCALE_BU;                  unit = SCALE_BU;
                 break;                  break;
         case ('M'):          case 'M':
                 unit = SCALE_MM;                  unit = SCALE_MM;
                 break;                  break;
         case ('n'):          case 'n':
                 unit = SCALE_EN;                  unit = SCALE_EN;
                 break;                  break;
         default:          default:
Line 142  void
Line 144  void
 tblcalc(struct rofftbl *tbl, const struct tbl_span *sp)  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp)
 {  {
         const struct tbl_dat    *dp;          const struct tbl_dat    *dp;
         const struct tbl_head   *hp;  
         struct roffcol          *col;          struct roffcol          *col;
         int                      spans;          int                      spans;
   
Line 153  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
Line 154  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
          */           */
   
         assert(NULL == tbl->cols);          assert(NULL == tbl->cols);
         tbl->cols = mandoc_calloc          tbl->cols = mandoc_calloc((size_t)sp->opts->cols,
                 ((size_t)sp->tbl->cols, sizeof(struct roffcol));              sizeof(struct roffcol));
   
         hp = sp->head;  
   
         for ( ; sp; sp = sp->next) {          for ( ; sp; sp = sp->next) {
                 if (TBL_SPAN_DATA != sp->pos)                  if (TBL_SPAN_DATA != sp->pos)
                         continue;                          continue;
Line 175  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
Line 174  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
                                 continue;                                  continue;
                         assert(dp->layout);                          assert(dp->layout);
                         col = &tbl->cols[dp->layout->head->ident];                          col = &tbl->cols[dp->layout->head->ident];
                         tblcalc_data(tbl, col, sp->tbl, dp);                          tblcalc_data(tbl, col, sp->opts, dp);
                 }                  }
         }          }
 }  }
   
 static void  static void
 tblcalc_data(struct rofftbl *tbl, struct roffcol *col,  tblcalc_data(struct rofftbl *tbl, struct roffcol *col,
                 const struct tbl *tp, const struct tbl_dat *dp)                  const struct tbl_opts *opts, const struct tbl_dat *dp)
 {  {
         size_t           sz;          size_t           sz;
   
         /* Branch down into data sub-types. */          /* Branch down into data sub-types. */
   
         switch (dp->layout->pos) {          switch (dp->layout->pos) {
         case (TBL_CELL_HORIZ):          case TBL_CELL_HORIZ:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (TBL_CELL_DHORIZ):          case TBL_CELL_DHORIZ:
                 sz = (*tbl->len)(1, tbl->arg);                  sz = (*tbl->len)(1, tbl->arg);
                 if (col->width < sz)                  if (col->width < sz)
                         col->width = sz;                          col->width = sz;
                 break;                  break;
         case (TBL_CELL_LONG):          case TBL_CELL_LONG:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (TBL_CELL_CENTRE):          case TBL_CELL_CENTRE:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (TBL_CELL_LEFT):          case TBL_CELL_LEFT:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (TBL_CELL_RIGHT):          case TBL_CELL_RIGHT:
                 tblcalc_literal(tbl, col, dp);                  tblcalc_literal(tbl, col, dp);
                 break;                  break;
         case (TBL_CELL_NUMBER):          case TBL_CELL_NUMBER:
                 tblcalc_number(tbl, col, tp, dp);                  tblcalc_number(tbl, col, opts, dp);
                 break;                  break;
         case (TBL_CELL_DOWN):          case TBL_CELL_DOWN:
                 break;                  break;
         default:          default:
                 abort();                  abort();
Line 232  tblcalc_literal(struct rofftbl *tbl, struct roffcol *c
Line 231  tblcalc_literal(struct rofftbl *tbl, struct roffcol *c
   
 static void  static void
 tblcalc_number(struct rofftbl *tbl, struct roffcol *col,  tblcalc_number(struct rofftbl *tbl, struct roffcol *col,
                 const struct tbl *tp, const struct tbl_dat *dp)                  const struct tbl_opts *opts, const struct tbl_dat *dp)
 {  {
         int              i;          int              i;
         size_t           sz, psz, ssz, d;          size_t           sz, psz, ssz, d;
         const char      *str;          const char      *str;
         char            *cp;          char            *cp;
Line 254  tblcalc_number(struct rofftbl *tbl, struct roffcol *co
Line 253  tblcalc_number(struct rofftbl *tbl, struct roffcol *co
   
         /* FIXME: TBL_DATA_HORIZ et al.? */          /* FIXME: TBL_DATA_HORIZ et al.? */
   
         buf[0] = tp->decimal;          buf[0] = opts->decimal;
         buf[1] = '\0';          buf[1] = '\0';
   
         psz = (*tbl->slen)(buf, tbl->arg);          psz = (*tbl->slen)(buf, tbl->arg);
   
         if (NULL != (cp = strrchr(str, tp->decimal))) {          if (NULL != (cp = strrchr(str, opts->decimal))) {
                 buf[1] = '\0';                  buf[1] = '\0';
                 for (ssz = 0, i = 0; cp != &str[i]; i++) {                  for (ssz = 0, i = 0; cp != &str[i]; i++) {
                         buf[0] = str[i];                          buf[0] = str[i];

Legend:
Removed from v.1.44  
changed lines
  Added in v.1.48

CVSweb