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

Diff for /mandoc/tbl_term.c between version 1.70 and 1.78

version 1.70, 2019/03/18 08:00:34 version 1.78, 2022/04/26 14:52:05
Line 1 
Line 1 
 /*      $Id$ */  /* $Id$ */
 /*  /*
    * Copyright (c) 2011-2022 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011-2019 Ingo Schwarze <schwarze@openbsd.org>  
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 25 
Line 25 
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
   
   #if DEBUG_MEMORY
   #include "mandoc_dbg.h"
   #endif
 #include "mandoc.h"  #include "mandoc.h"
 #include "tbl.h"  #include "tbl.h"
 #include "out.h"  #include "out.h"
Line 164  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 167  term_tbl(struct termp *tp, const struct tbl_span *sp)
         const struct tbl_cell   *cp, *cpn, *cpp, *cps;          const struct tbl_cell   *cp, *cpn, *cpp, *cps;
         const struct tbl_dat    *dp;          const struct tbl_dat    *dp;
         static size_t            offset;          static size_t            offset;
         size_t                   save_offset;          size_t                   save_offset;
         size_t                   coloff, tsz;          size_t                   coloff, tsz;
         int                      hspans, ic, more;          int                      hspans, ic, more;
         int                      dvert, fc, horiz, lhori, rhori, uvert;          int                      dvert, fc, horiz, lhori, rhori, uvert;
Line 190  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 193  term_tbl(struct termp *tp, const struct tbl_span *sp)
   
                 tblcalc(&tp->tbl, sp, tp->tcol->offset, tp->tcol->rmargin);                  tblcalc(&tp->tbl, sp, tp->tcol->offset, tp->tcol->rmargin);
   
                 /* Tables leak .ta settings to subsequent text. */  
   
                 term_tab_set(tp, NULL);  
                 coloff = sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX) ||  
                     sp->opts->lvert;  
                 for (ic = 0; ic < sp->opts->cols; ic++) {  
                         coloff += tp->tbl.cols[ic].width;  
                         term_tab_iset(coloff);  
                         coloff += tp->tbl.cols[ic].spacing;  
                 }  
   
                 /* Center the table as a whole. */                  /* Center the table as a whole. */
   
                 offset = tp->tcol->offset;                  offset = tp->tcol->offset;
Line 267  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 259  term_tbl(struct termp *tp, const struct tbl_span *sp)
                                 hspans--;                                  hspans--;
                                 continue;                                  continue;
                         }                          }
                         if (dp == NULL)                          if (dp != NULL &&
                                 continue;                              (ic || sp->layout->first->pos != TBL_CELL_SPAN)) {
                         hspans = dp->hspans;                                  hspans = dp->hspans;
                         if (ic || sp->layout->first->pos != TBL_CELL_SPAN)  
                                 dp = dp->next;                                  dp = dp->next;
                           }
                 }                  }
   
                 /* Set up a column for a right vertical frame. */                  /* Set up a column for a right vertical frame. */
Line 301  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 293  term_tbl(struct termp *tp, const struct tbl_span *sp)
                         }                          }
                         tp->tcol++;                          tp->tcol++;
                         tp->col = 0;                          tp->col = 0;
                           tp->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE);
                         tbl_data(tp, sp->opts, cp, dp, tp->tbl.cols + ic);                          tbl_data(tp, sp->opts, cp, dp, tp->tbl.cols + ic);
                         if (dp == NULL)                          if (dp != NULL &&
                                 continue;                              (ic || sp->layout->first->pos != TBL_CELL_SPAN)) {
                         hspans = dp->hspans;                                  hspans = dp->hspans;
                         if (cp->pos != TBL_CELL_SPAN)  
                                 dp = dp->next;                                  dp = dp->next;
                           }
                 }                  }
                 break;                  break;
         }          }
Line 425  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 418  term_tbl(struct termp *tp, const struct tbl_span *sp)
                                         cp = cp->next;                                          cp = cp->next;
                                         continue;                                          continue;
                                 }                                  }
                                 if (dp != NULL) {                                  if (dp != NULL && (ic ||
                                       sp->layout->first->pos != TBL_CELL_SPAN)) {
                                         hspans = dp->hspans;                                          hspans = dp->hspans;
                                         if (ic || sp->layout->first->pos                                          dp = dp->next;
                                             != TBL_CELL_SPAN)  
                                                 dp = dp->next;  
                                 }                                  }
   
                                 /*                                  /*
Line 622  tbl_hrule(struct termp *tp, const struct tbl_span *spp
Line 614  tbl_hrule(struct termp *tp, const struct tbl_span *spp
                     (spp == NULL || cpn == NULL ||                      (spp == NULL || cpn == NULL ||
                      cpn->pos != TBL_CELL_DOWN ? BRIGHT * hw : 0), 1);                       cpn->pos != TBL_CELL_DOWN ? BRIGHT * hw : 0), 1);
   
           col = tp->tbl.cols;
         for (;;) {          for (;;) {
                 col = tp->tbl.cols + cp->col;                  if (cp == NULL)
                           col++;
                   else
                           col = tp->tbl.cols + cp->col;
   
                 /* Print the horizontal line inside this column. */                  /* Print the horizontal line inside this column. */
   
Line 649  tbl_hrule(struct termp *tp, const struct tbl_span *spp
Line 645  tbl_hrule(struct termp *tp, const struct tbl_span *spp
                                         uw = 1;                                          uw = 1;
                         }                          }
                         cpp = cpp->next;                          cpp = cpp->next;
                 }                  } else if (spp != NULL && opts & TBL_OPT_ALLBOX)
                           uw = 1;
                 if (cp != NULL)                  if (cp != NULL)
                         cp = cp->next;                          cp = cp->next;
                 if (cpn != NULL) {                  if (cpn != NULL) {
Line 661  tbl_hrule(struct termp *tp, const struct tbl_span *spp
Line 658  tbl_hrule(struct termp *tp, const struct tbl_span *spp
                         cpn = cpn->next;                          cpn = cpn->next;
                         while (dpn != NULL && dpn->layout != cpn)                          while (dpn != NULL && dpn->layout != cpn)
                                 dpn = dpn->next;                                  dpn = dpn->next;
                 }                  } else if (spn != NULL && opts & TBL_OPT_ALLBOX)
                 if (cpp == NULL && cp == NULL && cpn == NULL)                          dw = 1;
                   if (col + 1 == tp->tbl.cols + sp->opts->cols)
                         break;                          break;
   
                 /* Vertical lines do not cross spanned cells. */                  /* Vertical lines do not cross spanned cells. */
Line 826  tbl_literal(struct termp *tp, const struct tbl_dat *dp
Line 824  tbl_literal(struct termp *tp, const struct tbl_dat *dp
         width = col->width;          width = col->width;
         ic = dp->layout->col;          ic = dp->layout->col;
         hspans = dp->hspans;          hspans = dp->hspans;
         while (hspans--)          while (hspans--) {
                 width += tp->tbl.cols[++ic].width + 3;                  width += tp->tbl.cols[ic].spacing;
                   ic++;
                   width += tp->tbl.cols[ic].width;
           }
   
         padr = width > len ? width - len : 0;          padr = width > len ? width - len : 0;
         padl = 0;          padl = 0;
Line 929  tbl_word(struct termp *tp, const struct tbl_dat *dp)
Line 930  tbl_word(struct termp *tp, const struct tbl_dat *dp)
         int              prev_font;          int              prev_font;
   
         prev_font = tp->fonti;          prev_font = tp->fonti;
         if (dp->layout->flags & TBL_CELL_BOLD)          switch (dp->layout->font) {
                 term_fontpush(tp, TERMFONT_BOLD);                  case ESCAPE_FONTBI:
         else if (dp->layout->flags & TBL_CELL_ITALIC)                          term_fontpush(tp, TERMFONT_BI);
                 term_fontpush(tp, TERMFONT_UNDER);                          break;
                   case ESCAPE_FONTBOLD:
                   case ESCAPE_FONTCB:
                           term_fontpush(tp, TERMFONT_BOLD);
                           break;
                   case ESCAPE_FONTITALIC:
                   case ESCAPE_FONTCI:
                           term_fontpush(tp, TERMFONT_UNDER);
                           break;
                   case ESCAPE_FONTROMAN:
                   case ESCAPE_FONTCR:
                           break;
                   default:
                           abort();
           }
   
         term_word(tp, dp->string);          term_word(tp, dp->string);
   

Legend:
Removed from v.1.70  
changed lines
  Added in v.1.78

CVSweb