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

Diff for /mandoc/term.c between version 1.289 and 1.290

version 1.289, 2022/08/15 18:12:30 version 1.290, 2022/08/16 17:45:55
Line 157  term_flushln(struct termp *p)
Line 157  term_flushln(struct termp *p)
                 /* Finally, print the field content. */                  /* Finally, print the field content. */
   
                 term_field(p, vbl, nbr);                  term_field(p, vbl, nbr);
                 p->tcol->taboff += vbr + (*p->width)(p, ' ');                  if (vbr < vtarget)
                           p->tcol->taboff += vbr;
                   else
                           p->tcol->taboff += vtarget;
                   p->tcol->taboff += (*p->width)(p, ' ');
   
                 /*                  /*
                  * If there is no text left in the field, exit the loop.                   * If there is no text left in the field, exit the loop.
Line 177  term_flushln(struct termp *p)
Line 181  term_flushln(struct termp *p)
                                         vbr += (*p->width)(p, ' ');                                          vbr += (*p->width)(p, ' ');
                                 continue;                                  continue;
                         case '\n':                          case '\n':
                           case ASCII_NBRZW:
                         case ASCII_BREAK:                          case ASCII_BREAK:
                           case ASCII_TABREF:
                                 continue;                                  continue;
                         default:                          default:
                                 break;                                  break;
Line 258  term_fill(struct termp *p, size_t *nbr, size_t *vbr, s
Line 264  term_fill(struct termp *p, size_t *nbr, size_t *vbr, s
         size_t   vn;        /* Visual position of the next character. */          size_t   vn;        /* Visual position of the next character. */
         int      breakline; /* Break at the end of this word. */          int      breakline; /* Break at the end of this word. */
         int      graph;     /* Last character was non-blank. */          int      graph;     /* Last character was non-blank. */
           int      taboff;    /* Temporary offset for literal tabs. */
   
         *nbr = *vbr = vis = 0;          *nbr = *vbr = vis = 0;
         breakline = graph = 0;          breakline = graph = 0;
           taboff = p->tcol->taboff;
         for (ic = p->tcol->col; ic < p->tcol->lastcol; ic++) {          for (ic = p->tcol->col; ic < p->tcol->lastcol; ic++) {
                 switch (p->tcol->buf[ic]) {                  switch (p->tcol->buf[ic]) {
                 case '\b':  /* Escape \o (overstrike) or backspace markup. */                  case '\b':  /* Escape \o (overstrike) or backspace markup. */
Line 306  term_fill(struct termp *p, size_t *nbr, size_t *vbr, s
Line 314  term_fill(struct termp *p, size_t *nbr, size_t *vbr, s
                         *vbr = vis;                          *vbr = vis;
                         continue;                          continue;
   
                   case ASCII_TABREF:
                           taboff = -vis - (*p->width)(p, ' ');
                           continue;
   
                 default:                  default:
                         switch (p->tcol->buf[ic]) {                          switch (p->tcol->buf[ic]) {
                         case '\t':                          case '\t':
                                 vis += p->tcol->taboff;                                  if (taboff < 0 && (size_t)-taboff > vis)
                                           vis = 0;
                                   else
                                           vis += taboff;
                                 vis = term_tab_next(vis);                                  vis = term_tab_next(vis);
                                 vis -= p->tcol->taboff;                                  vis -= taboff;
                                 break;                                  break;
                         case ASCII_NBRZW:  /* Non-breakable zero-width. */                          case ASCII_NBRZW:  /* Non-breakable zero-width. */
                                 break;                                  break;
Line 354  term_field(struct termp *p, size_t vbl, size_t nbr)
Line 369  term_field(struct termp *p, size_t vbl, size_t nbr)
         size_t   vis;   /* Visual position of the current character. */          size_t   vis;   /* Visual position of the current character. */
         size_t   vt;    /* Visual position including tab offset. */          size_t   vt;    /* Visual position including tab offset. */
         size_t   dv;    /* Visual width of the current character. */          size_t   dv;    /* Visual width of the current character. */
           int      taboff; /* Temporary offset for literal tabs. */
   
         vis = 0;          vis = 0;
           taboff = p->tcol->taboff;
         for (ic = p->tcol->col; ic < nbr; ic++) {          for (ic = p->tcol->col; ic < nbr; ic++) {
   
                 /*                  /*
Line 368  term_field(struct termp *p, size_t vbl, size_t nbr)
Line 385  term_field(struct termp *p, size_t vbl, size_t nbr)
                 case ASCII_BREAK:                  case ASCII_BREAK:
                 case ASCII_NBRZW:                  case ASCII_NBRZW:
                         continue;                          continue;
                   case ASCII_TABREF:
                           taboff = -vis - (*p->width)(p, ' ');
                           continue;
                 case '\t':                  case '\t':
                 case ' ':                  case ' ':
                 case ASCII_NBRSP:                  case ASCII_NBRSP:
                         if (p->tcol->buf[ic] == '\t') {                          if (p->tcol->buf[ic] == '\t') {
                                 vt = p->tcol->taboff + vis;                                  if (taboff < 0 && (size_t)-taboff > vis)
                                           vt = 0;
                                   else
                                           vt = vis + taboff;
                                 dv = term_tab_next(vt) - vt;                                  dv = term_tab_next(vt) - vt;
                         } else                          } else
                                 dv = (*p->width)(p, ' ');                                  dv = (*p->width)(p, ' ');
Line 437  endline(struct termp *p)
Line 460  endline(struct termp *p)
 void  void
 term_newln(struct termp *p)  term_newln(struct termp *p)
 {  {
         p->tcol->taboff = 0;  
         p->flags |= TERMP_NOSPACE;          p->flags |= TERMP_NOSPACE;
         if (p->tcol->lastcol || p->viscol)          if (p->tcol->lastcol || p->viscol)
                 term_flushln(p);                  term_flushln(p);
           p->tcol->taboff = 0;
 }  }
   
 /*  /*
Line 801  bufferc(struct termp *p, char c)
Line 824  bufferc(struct termp *p, char c)
                 p->tcol->lastcol = p->col;                  p->tcol->lastcol = p->col;
 }  }
   
   void
   term_tab_ref(struct termp *p)
   {
           if (p->tcol->lastcol && p->tcol->lastcol <= p->col &&
               (p->flags & TERMP_NOBUF) == 0)
                   bufferc(p, ASCII_TABREF);
   }
   
 /*  /*
  * See encode().   * See encode().
  * Do this for a single (probably unicode) value.   * Do this for a single (probably unicode) value.
Line 946  term_strlen(const struct termp *p, const char *cp)
Line 977  term_strlen(const struct termp *p, const char *cp)
         const char      *seq, *rhs;          const char      *seq, *rhs;
         enum mandoc_esc  esc;          enum mandoc_esc  esc;
         static const char rej[] = { '\\', ASCII_NBRSP, ASCII_NBRZW,          static const char rej[] = { '\\', ASCII_NBRSP, ASCII_NBRZW,
                 ASCII_BREAK, ASCII_HYPH, '\0' };                  ASCII_BREAK, ASCII_HYPH, ASCII_TABREF, '\0' };
   
         /*          /*
          * Account for escaped sequences within string length           * Account for escaped sequences within string length

Legend:
Removed from v.1.289  
changed lines
  Added in v.1.290

CVSweb