[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.47

version 1.39, 2010/07/25 22:15:07 version 1.47, 2011/03/07 01:58:24
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 420  pspdf_alloc(char *outopts)
Line 428  pspdf_alloc(char *outopts)
         const char      *pp;          const char      *pp;
         char            *v;          char            *v;
   
         if (NULL == (p = term_alloc(TERMENC_ASCII)))          p = term_alloc(TERMENC_ASCII);
                 return(NULL);  
   
         p->advance = ps_advance;          p->advance = ps_advance;
         p->begin = ps_begin;          p->begin = ps_begin;
Line 556  ps_printf(struct termp *p, const char *fmt, ...)
Line 563  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 582  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 609  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 780  ps_begin(struct termp *p)
Line 788  ps_begin(struct termp *p)
   
         if (TERMTYPE_PS == p->type) {          if (TERMTYPE_PS == p->type) {
                 ps_printf(p, "%%!PS-Adobe-3.0\n");                  ps_printf(p, "%%!PS-Adobe-3.0\n");
                 ps_printf(p, "%%%%Creator: mandoc-%s\n", VERSION);  
                 ps_printf(p, "%%%%CreationDate: %s", ctime(&t));                  ps_printf(p, "%%%%CreationDate: %s", ctime(&t));
                 ps_printf(p, "%%%%DocumentData: Clean7Bit\n");                  ps_printf(p, "%%%%DocumentData: Clean7Bit\n");
                 ps_printf(p, "%%%%Orientation: Portrait\n");                  ps_printf(p, "%%%%Orientation: Portrait\n");
Line 800  ps_begin(struct termp *p)
Line 807  ps_begin(struct termp *p)
                 ps_printf(p, "%%PDF-1.1\n");                  ps_printf(p, "%%PDF-1.1\n");
                 pdf_obj(p, 1);                  pdf_obj(p, 1);
                 ps_printf(p, "<<\n");                  ps_printf(p, "<<\n");
                 ps_printf(p, "/Creator mandoc-%s\n", VERSION);  
                 ps_printf(p, ">>\n");                  ps_printf(p, ">>\n");
                 ps_printf(p, "endobj\n");                  ps_printf(p, "endobj\n");
   
Line 899  ps_pletter(struct termp *p, int c)
Line 905  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.47

CVSweb