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

Diff for /mandoc/term_ps.c between version 1.71 and 1.72

version 1.71, 2014/12/19 17:12:04 version 1.72, 2015/01/21 19:40:54
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2014, 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
Line 60  struct termp_ps {
Line 60  struct termp_ps {
 #define PS_NEWPAGE       (1 << 2)       /* new page, no words yet */  #define PS_NEWPAGE       (1 << 2)       /* new page, no words yet */
 #define PS_BACKSP        (1 << 3)       /* last character was backspace */  #define PS_BACKSP        (1 << 3)       /* last character was backspace */
         size_t            pscol;        /* visible column (AFM units) */          size_t            pscol;        /* visible column (AFM units) */
           size_t            pscolnext;    /* used for overstrike */
         size_t            psrow;        /* visible row (AFM units) */          size_t            psrow;        /* visible row (AFM units) */
         char             *psmarg;       /* margin buf */          char             *psmarg;       /* margin buf */
         size_t            psmargsz;     /* margin buf size */          size_t            psmargsz;     /* margin buf size */
Line 1072  ps_fclose(struct termp *p)
Line 1073  ps_fclose(struct termp *p)
 static void  static void
 ps_letter(struct termp *p, int arg)  ps_letter(struct termp *p, int arg)
 {  {
         size_t          savecol;          size_t          savecol, wx;
         char            c;          char            c;
   
         c = arg >= 128 || arg <= 0 ? '?' : arg;          c = arg >= 128 || arg <= 0 ? '?' : arg;
Line 1144  ps_letter(struct termp *p, int arg)
Line 1145  ps_letter(struct termp *p, int arg)
                         ps_setfont(p, p->ps->nextf);                          ps_setfont(p, p->ps->nextf);
                 }                  }
                 p->ps->nextf = TERMFONT_NONE;                  p->ps->nextf = TERMFONT_NONE;
   
                   /*
                    * For an overstrike, if a previous character
                    * was wider, advance to center the new one.
                    */
   
                   if (p->ps->pscolnext) {
                           wx = fonts[p->ps->lastf].gly[(int)p->ps->last-32].wx;
                           if (p->ps->pscol + wx < p->ps->pscolnext)
                                   p->ps->pscol = (p->ps->pscol +
                                       p->ps->pscolnext - wx) / 2;
                   }
   
                 ps_pletter(p, p->ps->last);                  ps_pletter(p, p->ps->last);
   
                   /*
                    * For an overstrike, if a previous character
                    * was wider, advance to the end of the old one.
                    */
   
                   if (p->ps->pscol < p->ps->pscolnext) {
                           ps_pclose(p);
                           p->ps->pscol = p->ps->pscolnext;
                   }
         }          }
   
         /*          /*
Line 1158  ps_letter(struct termp *p, int arg)
Line 1182  ps_letter(struct termp *p, int arg)
   
         /*          /*
          * For an overstrike, back up to the previous position.           * For an overstrike, back up to the previous position.
            * If the previous character is wider than any it overstrikes,
            * remember the current position, because it might also be
            * wider than all that will overstrike it.
          */           */
   
         if (savecol != SIZE_MAX) {          if (savecol != SIZE_MAX) {
                   if (p->ps->pscolnext < p->ps->pscol)
                           p->ps->pscolnext = p->ps->pscol;
                 ps_pclose(p);                  ps_pclose(p);
                 p->ps->pscol = savecol;                  p->ps->pscol = savecol;
                 p->ps->flags &= ~PS_BACKSP;                  p->ps->flags &= ~PS_BACKSP;
         }          } else
                   p->ps->pscolnext = 0;
 }  }
   
 static void  static void

Legend:
Removed from v.1.71  
changed lines
  Added in v.1.72

CVSweb