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

Diff for /mandoc/term.c between version 1.242 and 1.246

version 1.242, 2014/12/24 23:32:42 version 1.246, 2015/04/02 23:48:20
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010-2015 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
  * copyright notice and this permission notice appear in all copies.   * copyright notice and this permission notice appear in all copies.
  *   *
  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
Line 49  term_free(struct termp *p)
Line 49  term_free(struct termp *p)
   
 void  void
 term_begin(struct termp *p, term_margin head,  term_begin(struct termp *p, term_margin head,
                 term_margin foot, const void *arg)                  term_margin foot, const struct roff_meta *arg)
 {  {
   
         p->headf = head;          p->headf = head;
Line 363  term_fontpush(struct termp *p, enum termfont f)
Line 363  term_fontpush(struct termp *p, enum termfont f)
         p->fontq[p->fonti] = f;          p->fontq[p->fonti] = f;
 }  }
   
 /* Retrieve pointer to current font. */  
 const enum termfont *  
 term_fontq(struct termp *p)  
 {  
   
         return(&p->fontq[p->fonti]);  
 }  
   
 /* Flush to make the saved pointer current again. */  /* Flush to make the saved pointer current again. */
 void  void
 term_fontpopq(struct termp *p, const enum termfont *key)  term_fontpopq(struct termp *p, int i)
 {  {
   
         while (p->fonti >= 0 && key < p->fontq + p->fonti)          assert(i >= 0);
                 p->fonti--;          if (p->fonti > i)
         assert(p->fonti >= 0);                  p->fonti = i;
 }  }
   
 /* Pop one font off the stack. */  /* Pop one font off the stack. */
Line 421  term_word(struct termp *p, const char *word)
Line 413  term_word(struct termp *p, const char *word)
                 p->flags |= TERMP_NOSPACE;                  p->flags |= TERMP_NOSPACE;
   
         p->flags &= ~(TERMP_SENTENCE | TERMP_NONEWLINE);          p->flags &= ~(TERMP_SENTENCE | TERMP_NONEWLINE);
           p->skipvsp = 0;
   
         while ('\0' != *word) {          while ('\0' != *word) {
                 if ('\\' != *word) {                  if ('\\' != *word) {
Line 495  term_word(struct termp *p, const char *word)
Line 488  term_word(struct termp *p, const char *word)
                 case ESCAPE_SKIPCHAR:                  case ESCAPE_SKIPCHAR:
                         p->flags |= TERMP_SKIPCHAR;                          p->flags |= TERMP_SKIPCHAR;
                         continue;                          continue;
                   case ESCAPE_OVERSTRIKE:
                           cp = seq + sz;
                           while (seq < cp) {
                                   if (*seq == '\\') {
                                           mandoc_escape(&seq, NULL, NULL);
                                           continue;
                                   }
                                   encode1(p, *seq++);
                                   if (seq < cp)
                                           encode(p, "\b", 1);
                           }
                 default:                  default:
                         continue;                          continue;
                 }                  }
Line 557  encode1(struct termp *p, int c)
Line 561  encode1(struct termp *p, int c)
         if (p->col + 6 >= p->maxcols)          if (p->col + 6 >= p->maxcols)
                 adjbuf(p, p->col + 6);                  adjbuf(p, p->col + 6);
   
         f = *term_fontq(p);          f = p->fontq[p->fonti];
   
         if (TERMFONT_UNDER == f || TERMFONT_BI == f) {          if (TERMFONT_UNDER == f || TERMFONT_BI == f) {
                 p->buf[p->col++] = '_';                  p->buf[p->col++] = '_';
Line 589  encode(struct termp *p, const char *word, size_t sz)
Line 593  encode(struct termp *p, const char *word, size_t sz)
          * character by character.           * character by character.
          */           */
   
         if (*term_fontq(p) == TERMFONT_NONE) {          if (p->fontq[p->fonti] == TERMFONT_NONE) {
                 if (p->col + sz >= p->maxcols)                  if (p->col + sz >= p->maxcols)
                         adjbuf(p, p->col + sz);                          adjbuf(p, p->col + sz);
                 for (i = 0; i < sz; i++)                  for (i = 0; i < sz; i++)
Line 715  term_strlen(const struct termp *p, const char *cp)
Line 719  term_strlen(const struct termp *p, const char *cp)
                                 continue;                                  continue;
                         case ESCAPE_SKIPCHAR:                          case ESCAPE_SKIPCHAR:
                                 skip = 1;                                  skip = 1;
                                   continue;
                           case ESCAPE_OVERSTRIKE:
                                   rsz = 0;
                                   rhs = seq + ssz;
                                   while (seq < rhs) {
                                           if (*seq == '\\') {
                                                   mandoc_escape(&seq, NULL, NULL);
                                                   continue;
                                           }
                                           i = (*p->width)(p, *seq++);
                                           if (rsz < i)
                                                   rsz = i;
                                   }
                                   sz += rsz;
                                 continue;                                  continue;
                         default:                          default:
                                 continue;                                  continue;

Legend:
Removed from v.1.242  
changed lines
  Added in v.1.246

CVSweb