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

Diff for /mandoc/term_ascii.c between version 1.44 and 1.45

version 1.44, 2015/03/27 21:33:20 version 1.45, 2015/04/04 17:47:18
Line 40 
Line 40 
   
 static  struct termp     *ascii_init(enum termenc, const struct mchars *,  static  struct termp     *ascii_init(enum termenc, const struct mchars *,
                                 const struct manoutput *);                                  const struct manoutput *);
 static  double            ascii_hspan(const struct termp *,  static  int               ascii_hspan(const struct termp *,
                                 const struct roffsu *);                                  const struct roffsu *);
 static  size_t            ascii_width(const struct termp *, int);  static  size_t            ascii_width(const struct termp *, int);
 static  void              ascii_advance(struct termp *, size_t);  static  void              ascii_advance(struct termp *, size_t);
Line 48  static void    ascii_begin(struct termp *);
Line 48  static void    ascii_begin(struct termp *);
 static  void              ascii_end(struct termp *);  static  void              ascii_end(struct termp *);
 static  void              ascii_endline(struct termp *);  static  void              ascii_endline(struct termp *);
 static  void              ascii_letter(struct termp *, int);  static  void              ascii_letter(struct termp *, int);
 static  void              ascii_setwidth(struct termp *, int, size_t);  static  void              ascii_setwidth(struct termp *, int, int);
   
 #if HAVE_WCHAR  #if HAVE_WCHAR
 static  void              locale_advance(struct termp *, size_t);  static  void              locale_advance(struct termp *, size_t);
Line 137  locale_alloc(const struct mchars *mchars, const struct
Line 137  locale_alloc(const struct mchars *mchars, const struct
 }  }
   
 static void  static void
 ascii_setwidth(struct termp *p, int iop, size_t width)  ascii_setwidth(struct termp *p, int iop, int width)
 {  {
   
           width /= 24;
         p->rmargin = p->defrmargin;          p->rmargin = p->defrmargin;
         if (iop > 0)          if (iop > 0)
                 p->defrmargin += width;                  p->defrmargin += width;
         else if (iop == 0)          else if (iop == 0)
                 p->defrmargin = width ? width : p->lastrmargin;                  p->defrmargin = width ? (size_t)width : p->lastrmargin;
         else if (p->defrmargin > width)          else if (p->defrmargin > (size_t)width)
                 p->defrmargin -= width;                  p->defrmargin -= width;
         else          else
                 p->defrmargin = 0;                  p->defrmargin = 0;
Line 218  ascii_advance(struct termp *p, size_t len)
Line 219  ascii_advance(struct termp *p, size_t len)
                 putchar(' ');                  putchar(' ');
 }  }
   
 static double  static int
 ascii_hspan(const struct termp *p, const struct roffsu *su)  ascii_hspan(const struct termp *p, const struct roffsu *su)
 {  {
         double           r;          double           r;
   
         /*  
          * Approximate based on character width.  
          * None of these will be actually correct given that an inch on  
          * the screen depends on character size, terminal, etc., etc.  
          */  
         switch (su->unit) {          switch (su->unit) {
         case SCALE_BU:          case SCALE_BU:
                 r = su->scale * 10.0 / 240.0;                  r = su->scale;
                 break;                  break;
         case SCALE_CM:          case SCALE_CM:
                 r = su->scale * 10.0 / 2.54;                  r = su->scale * 240.0 / 2.54;
                 break;                  break;
         case SCALE_FS:          case SCALE_FS:
                 r = su->scale * 2730.666;                  r = su->scale * 65536.0;
                 break;                  break;
         case SCALE_IN:          case SCALE_IN:
                 r = su->scale * 10.0;                  r = su->scale * 240.0;
                 break;                  break;
         case SCALE_MM:          case SCALE_MM:
                 r = su->scale / 100.0;                  r = su->scale * 0.24;
                 break;                  break;
           case SCALE_VS:
                   /* FALLTHROUGH */
         case SCALE_PC:          case SCALE_PC:
                 r = su->scale * 10.0 / 6.0;                  r = su->scale * 40.0;
                 break;                  break;
         case SCALE_PT:          case SCALE_PT:
                 r = su->scale * 10.0 / 72.0;                  r = su->scale * 10.0 / 3.0;
                 break;                  break;
         case SCALE_VS:  
                 r = su->scale * 2.0 - 1.0;  
                 break;  
         case SCALE_EN:          case SCALE_EN:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case SCALE_EM:          case SCALE_EM:
                 r = su->scale;                  r = su->scale * 24.0;
                 break;                  break;
         default:          default:
                 abort();                  abort();
                 /* NOTREACHED */                  /* NOTREACHED */
         }          }
           return(r > 0.0 ? r + 0.01 : r - 0.01);
         return(r);  
 }  }
   
 const char *  const char *

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

CVSweb