[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.30 and 1.33

version 1.30, 2010/07/04 19:57:26 version 1.33, 2010/07/05 08:46:09
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 426  ps_alloc(char *outopts)
Line 421  ps_alloc(char *outopts)
   
         /* Default to US letter (millimetres). */          /* Default to US letter (millimetres). */
   
         pagex = DEFPAGEX_MM;          pagex = 216;
         pagey = DEFPAGEY_MM;          pagey = 279;
   
         /*          /*
          * The ISO-269 paper sizes can be calculated automatically, but           * The ISO-269 paper sizes can be calculated automatically, but
Line 454  ps_alloc(char *outopts)
Line 449  ps_alloc(char *outopts)
         } else if (NULL == pp)          } else if (NULL == pp)
                 pp = "letter";                  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           * This MUST be defined before any PNT2AFM or AFM2PNT
          * calculations occur.           * calculations occur.
Line 483  ps_alloc(char *outopts)
Line 468  ps_alloc(char *outopts)
         marginy = /* LINTED */          marginy = /* LINTED */
                 (size_t)((double)pagey / 9.0);                  (size_t)((double)pagey / 9.0);
   
         lineheight = PNT2AFM(p, 16);          /* Line-height is 1.4em. */
   
           lineheight = PNT2AFM(p, ((double)p->engine.ps.scale * 1.4));
   
         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 - (marginy / 2) - (lineheight / 2);          p->engine.ps.header = pagey - (marginy / 2) - (lineheight / 2);
Line 655  ps_begin(struct termp *p)
Line 642  ps_begin(struct termp *p)
                 printf(" %s", fonts[i].name);                  printf(" %s", fonts[i].name);
         printf("\n%%%%EndComments\n");          printf("\n%%%%EndComments\n");
   
         printf("%%%%Page: %zu %zu\n",  
                         p->engine.ps.pages + 1,  
                         p->engine.ps.pages + 1);  
   
         ps_setfont(p, TERMFONT_NONE);  
         p->engine.ps.pscol = p->engine.ps.left;          p->engine.ps.pscol = p->engine.ps.left;
         p->engine.ps.psrow = p->engine.ps.top;          p->engine.ps.psrow = p->engine.ps.top;
         p->engine.ps.flags |= PS_NEWPAGE;          p->engine.ps.flags |= PS_NEWPAGE;
           ps_setfont(p, TERMFONT_NONE);
 }  }
   
   
Line 670  static void
Line 653  static void
 ps_pletter(struct termp *p, int c)  ps_pletter(struct termp *p, int c)
 {  {
         int              f;          int              f;
   
         /*          /*
          * If we're not in a PostScript "word" context, then open one           * If we haven't opened a page context, then output that we're
          * now at the current cursor.           * in a new page and make sure the font is correctly set.
          */           */
   
         if (PS_NEWPAGE & p->engine.ps.flags)          if (PS_NEWPAGE & p->engine.ps.flags) {
                 printf("%%%%Page: %zu %zu\n",                  printf("%%%%Page: %zu %zu\n",
                                 p->engine.ps.pages + 1,                                  p->engine.ps.pages + 1,
                                 p->engine.ps.pages + 1);                                  p->engine.ps.pages + 1);
                   ps_printf(p, "/%s %zu selectfont\n",
                                   fonts[(int)p->engine.ps.lastf].name,
                                   p->engine.ps.scale);
                   p->engine.ps.flags &= ~PS_NEWPAGE;
           }
   
           /*
            * If we're not in a PostScript "word" context, then open one
            * now at the current cursor.
            */
   
         if ( ! (PS_INLINE & p->engine.ps.flags)) {          if ( ! (PS_INLINE & p->engine.ps.flags)) {
                 ps_printf(p, "%zu %zu moveto\n(",                  ps_printf(p, "%zu %zu moveto\n(",
                                 AFM2PNT(p, p->engine.ps.pscol),                                  AFM2PNT(p, p->engine.ps.pscol),
                                 AFM2PNT(p, p->engine.ps.psrow));                                  AFM2PNT(p, p->engine.ps.psrow));
                 p->engine.ps.flags |= PS_INLINE;                  p->engine.ps.flags |= PS_INLINE;
                 p->engine.ps.flags &= ~PS_NEWPAGE;  
         }          }
   
         assert( ! (PS_NEWPAGE & p->engine.ps.flags));          assert( ! (PS_NEWPAGE & p->engine.ps.flags));
Line 888  ps_setfont(struct termp *p, enum termfont f)
Line 880  ps_setfont(struct termp *p, enum termfont f)
 {  {
   
         assert(f < TERMFONT__MAX);          assert(f < TERMFONT__MAX);
           p->engine.ps.lastf = f;
   
           /*
            * If we're still at the top of the page, let the font-setting
            * be delayed until we actually have stuff to print.
            */
   
           if (PS_NEWPAGE & p->engine.ps.flags)
                   return;
   
         ps_printf(p, "/%s %zu selectfont\n",          ps_printf(p, "/%s %zu selectfont\n",
                         fonts[(int)f].name, p->engine.ps.scale);                          fonts[(int)f].name, p->engine.ps.scale);
         p->engine.ps.lastf = f;  
 }  }
   
   

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.33

CVSweb