[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.39 and 1.45

version 1.39, 2010/07/25 22:15:07 version 1.45, 2010/09/27 23:03:44
Line 18 
Line 18 
 #include "config.h"  #include "config.h"
 #endif  #endif
   
 #include <sys/param.h>  #include <sys/types.h>
   
 #include <assert.h>  #include <assert.h>
 #include <stdarg.h>  #include <stdarg.h>
Line 29 
Line 29 
 #include <time.h>  #include <time.h>
 #include <unistd.h>  #include <unistd.h>
   
   #include "mandoc.h"
 #include "out.h"  #include "out.h"
 #include "main.h"  #include "main.h"
 #include "term.h"  #include "term.h"
Line 353  static const struct font fonts[TERMFONT__MAX] = {
Line 354  static const struct font fonts[TERMFONT__MAX] = {
   
 /* These work the buffer used by the header and footer. */  /* These work the buffer used by the header and footer. */
 #define PS_BUFSLOP        128  #define PS_BUFSLOP        128
 #define PS_GROWBUF(p, sz) \  
         do if ((p)->engine.ps.psmargcur + (sz) > \  
                         (p)->engine.ps.psmargsz) { \  
                 (p)->engine.ps.psmargsz += /* CONSTCOND */ \  
                         MAX(PS_BUFSLOP, (sz)); \  
                 (p)->engine.ps.psmarg = realloc \  
                         ((p)->engine.ps.psmarg,  \  
                          (p)->engine.ps.psmargsz); \  
                 if (NULL == (p)->engine.ps.psmarg) { \  
                         perror(NULL); \  
                         exit(EXIT_FAILURE); \  
                 } \  
         } while (/* CONSTCOND */ 0)  
   
   static void
   ps_growbuf(struct termp *p, size_t sz)
   {
           if (p->engine.ps.psmargcur + sz <= p->engine.ps.psmargsz)
                   return;
   
           if (sz < PS_BUFSLOP)
                   sz = PS_BUFSLOP;
   
           p->engine.ps.psmargsz += sz;
   
           p->engine.ps.psmarg = realloc
                   (p->engine.ps.psmarg,
                    p->engine.ps.psmargsz);
   
           if (NULL == p->engine.ps.psmarg) {
                   perror(NULL);
                   exit((int)MANDOCLEVEL_SYSERR);
           }
   }
   
 static  double            ps_hspan(const struct termp *,  static  double            ps_hspan(const struct termp *,
                                 const struct roffsu *);                                  const struct roffsu *);
 static  size_t            ps_width(const struct termp *, char);  static  size_t            ps_width(const struct termp *, char);
Line 556  ps_printf(struct termp *p, const char *fmt, ...)
Line 564  ps_printf(struct termp *p, const char *fmt, ...)
          * assumption that will cause pukeage if it's not the case.           * assumption that will cause pukeage if it's not the case.
          */           */
   
         PS_GROWBUF(p, PS_BUFSLOP);          ps_growbuf(p, PS_BUFSLOP);
   
         pos = (int)p->engine.ps.psmargcur;          pos = (int)p->engine.ps.psmargcur;
         len = vsnprintf(&p->engine.ps.psmarg[pos], PS_BUFSLOP, fmt, ap);          len = vsnprintf(&p->engine.ps.psmarg[pos], PS_BUFSLOP, fmt, ap);
Line 575  ps_putchar(struct termp *p, char c)
Line 583  ps_putchar(struct termp *p, char c)
         /* See ps_printf(). */          /* See ps_printf(). */
   
         if ( ! (PS_MARGINS & p->engine.ps.flags)) {          if ( ! (PS_MARGINS & p->engine.ps.flags)) {
                   /* LINTED */
                 putchar(c);                  putchar(c);
                 p->engine.ps.pdfbytes++;                  p->engine.ps.pdfbytes++;
                 return;                  return;
         }          }
   
         PS_GROWBUF(p, 2);          ps_growbuf(p, 2);
   
         pos = (int)p->engine.ps.psmargcur++;          pos = (int)p->engine.ps.psmargcur++;
         p->engine.ps.psmarg[pos++] = c;          p->engine.ps.psmarg[pos++] = c;
Line 601  pdf_obj(struct termp *p, size_t obj)
Line 610  pdf_obj(struct termp *p, size_t obj)
                          p->engine.ps.pdfobjsz * sizeof(size_t));                           p->engine.ps.pdfobjsz * sizeof(size_t));
                 if (NULL == p->engine.ps.pdfobjs) {                  if (NULL == p->engine.ps.pdfobjs) {
                         perror(NULL);                          perror(NULL);
                         exit(EXIT_FAILURE);                          exit((int)MANDOCLEVEL_SYSERR);
                 }                  }
         }          }
   
Line 899  ps_pletter(struct termp *p, int c)
Line 908  ps_pletter(struct termp *p, int c)
   
         f = (int)p->engine.ps.lastf;          f = (int)p->engine.ps.lastf;
   
         if (c <= 32 || (c - 32 > MAXCHAR)) {          if (c <= 32 || (c - 32 >= MAXCHAR)) {
                 ps_putchar(p, ' ');                  ps_putchar(p, ' ');
                 p->engine.ps.pscol += (size_t)fonts[f].gly[0].wx;                  p->engine.ps.pscol += (size_t)fonts[f].gly[0].wx;
                 return;                  return;

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

CVSweb