[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.26 and 1.27

version 1.26, 2010/07/02 10:53:28 version 1.27, 2010/07/04 10:53:04
Line 33 
Line 33 
 #include "main.h"  #include "main.h"
 #include "term.h"  #include "term.h"
   
   #define MINMARGIN_MM    20      /* Minimum 2cm margins. */
   #define MINMARGIN_PNT   56.68
   #define DEFPAGEX_MM     216     /* Default page size is US-letter. */
   #define DEFPAGEY_MM     279
   
 /* Convert PostScript point "x" to an AFM unit. */  /* Convert PostScript point "x" to an AFM unit. */
 #define PNT2AFM(p, x) /* LINTED */ \  #define PNT2AFM(p, x) /* LINTED */ \
         (size_t)((double)(x) * (1000.0 / (double)(p)->engine.ps.scale))          (size_t)((double)(x) * (1000.0 / (double)(p)->engine.ps.scale))
Line 388  void *
Line 393  void *
 ps_alloc(char *outopts)  ps_alloc(char *outopts)
 {  {
         struct termp    *p;          struct termp    *p;
         size_t           pagex, pagey, margin, lineheight;          size_t           pagex, pagey, margin, lineheight, m1, m2;
         const char      *toks[2];          const char      *toks[2];
         const char      *pp;          const char      *pp;
         char            *v;          char            *v;
Line 405  ps_alloc(char *outopts)
Line 410  ps_alloc(char *outopts)
         p->type = TERMTYPE_PS;          p->type = TERMTYPE_PS;
         p->width = ps_width;          p->width = ps_width;
   
         p->engine.ps.scale = 11;  
   
         toks[0] = "paper";          toks[0] = "paper";
         toks[1] = NULL;          toks[1] = NULL;
   
Line 421  ps_alloc(char *outopts)
Line 424  ps_alloc(char *outopts)
                         break;                          break;
                 }                  }
   
         margin = PNT2AFM(p, 72);  
         lineheight = PNT2AFM(p, 12);  
   
         /* Default to US letter (millimetres). */          /* Default to US letter (millimetres). */
   
         pagex = 216;          pagex = DEFPAGEX_MM;
         pagey = 279;          pagey = DEFPAGEY_MM;
   
         /*          /*
          * The ISO-269 paper sizes can be calculated automatically, but           * The ISO-269 paper sizes can be calculated automatically, but
Line 451  ps_alloc(char *outopts)
Line 451  ps_alloc(char *outopts)
                         pagey = 356;                          pagey = 356;
                 } else if (2 != sscanf(pp, "%zux%zu", &pagex, &pagey))                  } else if (2 != sscanf(pp, "%zux%zu", &pagex, &pagey))
                         fprintf(stderr, "%s: Unknown paper\n", pp);                          fprintf(stderr, "%s: Unknown paper\n", pp);
           } else if (NULL == pp)
                   pp = "letter";
   
           /* Enforce minimum page size >= (2 times) min-margin. */
   
           if ((2 * MINMARGIN_MM) >= pagex) {
                   fprintf(stderr, "%s: Insufficient page width\n", pp);
                   pagex = DEFPAGEX_MM;
           } else if ((2 * MINMARGIN_MM >= pagey)) {
                   fprintf(stderr, "%s: Insufficient page length\n", pp);
                   pagey = DEFPAGEY_MM;
         }          }
   
           /*
            * This MUST be defined before any PNT2AFM or AFM2PNT
            * calculations occur.
            */
   
           p->engine.ps.scale = 11;
   
         /* Remember millimetres -> AFM units. */          /* Remember millimetres -> AFM units. */
   
         pagex = PNT2AFM(p, ((double)pagex * 2.834));          pagex = PNT2AFM(p, ((double)pagex * 2.834));
         pagey = PNT2AFM(p, ((double)pagey * 2.834));          pagey = PNT2AFM(p, ((double)pagey * 2.834));
   
         assert(margin * 2 < pagex);          /*
         assert(margin * 2 < pagey);           * Calculate margins.  First get the minimum text width: either
            * page minus margins or width of 65 'm' characters.  Set total
            * margins to page size minus text width.
            */
   
           m1 = ps_width(p, 'm') * 65;
           m2 = pagex - (2 * PNT2AFM(p, MINMARGIN_PNT));
           margin = (pagex - (m1 < m2 ? m1 : m2)) / 2;
   
           lineheight = PNT2AFM(p, 16);
   
         p->engine.ps.width = pagex;          p->engine.ps.width = pagex;
         p->engine.ps.height = pagey;          p->engine.ps.height = pagey;
         p->engine.ps.header = pagey - (margin / 2);          p->engine.ps.header = pagey - (margin / 2) - (lineheight / 2);
         p->engine.ps.top = pagey - margin;          p->engine.ps.top = pagey - margin;
         p->engine.ps.footer = (margin / 2);          p->engine.ps.footer = (margin / 2) - (lineheight / 2);
         p->engine.ps.bottom = margin;          p->engine.ps.bottom = margin;
         p->engine.ps.left = margin;          p->engine.ps.left = margin;
         p->engine.ps.lineheight = lineheight;          p->engine.ps.lineheight = lineheight;

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.27

CVSweb