Lines Matching refs:p
41 #define PNT2AFM(p, x) /* LINTED */ \ argument
42 (size_t)((double)(x) * (1000.0 / (double)(p)->ps->scale))
45 #define AFM2PNT(p, x) /* LINTED */ \ argument
46 ((double)(x) / (1000.0 / (double)(p)->ps->scale))
409 struct termp *p; in pdf_alloc() local
411 if (NULL != (p = pspdf_alloc(outopts))) in pdf_alloc()
412 p->type = TERMTYPE_PDF; in pdf_alloc()
414 return(p); in pdf_alloc()
420 struct termp *p; in ps_alloc() local
422 if (NULL != (p = pspdf_alloc(outopts))) in ps_alloc()
423 p->type = TERMTYPE_PS; in ps_alloc()
425 return(p); in ps_alloc()
431 struct termp *p; in pspdf_alloc() local
438 p = mandoc_calloc(1, sizeof(struct termp)); in pspdf_alloc()
439 p->enc = TERMENC_ASCII; in pspdf_alloc()
440 p->ps = mandoc_calloc(1, sizeof(struct termp_ps)); in pspdf_alloc()
442 p->advance = ps_advance; in pspdf_alloc()
443 p->begin = ps_begin; in pspdf_alloc()
444 p->end = ps_end; in pspdf_alloc()
445 p->endline = ps_endline; in pspdf_alloc()
446 p->hspan = ps_hspan; in pspdf_alloc()
447 p->letter = ps_letter; in pspdf_alloc()
448 p->width = ps_width; in pspdf_alloc()
498 p->ps->scale = 11; in pspdf_alloc()
502 pagex = PNT2AFM(p, ((double)pagex * 2.834)); in pspdf_alloc()
503 pagey = PNT2AFM(p, ((double)pagey * 2.834)); in pspdf_alloc()
514 lineheight = PNT2AFM(p, ((double)p->ps->scale * 1.4)); in pspdf_alloc()
516 p->ps->width = (size_t)pagex; in pspdf_alloc()
517 p->ps->height = (size_t)pagey; in pspdf_alloc()
518 p->ps->header = pagey - (marginy / 2) - (lineheight / 2); in pspdf_alloc()
519 p->ps->top = pagey - marginy; in pspdf_alloc()
520 p->ps->footer = (marginy / 2) - (lineheight / 2); in pspdf_alloc()
521 p->ps->bottom = marginy; in pspdf_alloc()
522 p->ps->left = marginx; in pspdf_alloc()
523 p->ps->lineheight = lineheight; in pspdf_alloc()
525 p->defrmargin = pagex - (marginx * 2); in pspdf_alloc()
526 return(p); in pspdf_alloc()
533 struct termp *p; in pspdf_free() local
535 p = (struct termp *)arg; in pspdf_free()
537 if (p->ps->psmarg) in pspdf_free()
538 free(p->ps->psmarg); in pspdf_free()
539 if (p->ps->pdfobjs) in pspdf_free()
540 free(p->ps->pdfobjs); in pspdf_free()
542 free(p->ps); in pspdf_free()
543 term_free(p); in pspdf_free()
548 ps_printf(struct termp *p, const char *fmt, ...) in ps_printf() argument
561 if ( ! (PS_MARGINS & p->ps->flags)) { in ps_printf()
564 p->ps->pdfbytes += /* LINTED */ in ps_printf()
575 ps_growbuf(p, PS_BUFSLOP); in ps_printf()
577 pos = (int)p->ps->psmargcur; in ps_printf()
578 vsnprintf(&p->ps->psmarg[pos], PS_BUFSLOP, fmt, ap); in ps_printf()
582 p->ps->psmargcur = strlen(p->ps->psmarg); in ps_printf()
587 ps_putchar(struct termp *p, char c) in ps_putchar() argument
593 if ( ! (PS_MARGINS & p->ps->flags)) { in ps_putchar()
596 p->ps->pdfbytes++; in ps_putchar()
600 ps_growbuf(p, 2); in ps_putchar()
602 pos = (int)p->ps->psmargcur++; in ps_putchar()
603 p->ps->psmarg[pos++] = c; in ps_putchar()
604 p->ps->psmarg[pos] = '\0'; in ps_putchar()
609 pdf_obj(struct termp *p, size_t obj) in pdf_obj() argument
614 if ((obj - 1) >= p->ps->pdfobjsz) { in pdf_obj()
615 p->ps->pdfobjsz = obj + 128; in pdf_obj()
616 p->ps->pdfobjs = realloc in pdf_obj()
617 (p->ps->pdfobjs, in pdf_obj()
618 p->ps->pdfobjsz * sizeof(size_t)); in pdf_obj()
619 if (NULL == p->ps->pdfobjs) { in pdf_obj()
625 p->ps->pdfobjs[(int)obj - 1] = p->ps->pdfbytes; in pdf_obj()
626 ps_printf(p, "%zu 0 obj\n", obj); in pdf_obj()
631 ps_closepage(struct termp *p) in ps_closepage() argument
643 assert(p->ps->psmarg && p->ps->psmarg[0]); in ps_closepage()
644 ps_printf(p, "%s", p->ps->psmarg); in ps_closepage()
646 if (TERMTYPE_PS != p->type) { in ps_closepage()
647 ps_printf(p, "ET\n"); in ps_closepage()
649 len = p->ps->pdfbytes - p->ps->pdflastpg; in ps_closepage()
650 base = p->ps->pages * 4 + p->ps->pdfbody; in ps_closepage()
652 ps_printf(p, "endstream\nendobj\n"); in ps_closepage()
655 pdf_obj(p, base + 1); in ps_closepage()
656 ps_printf(p, "%zu\nendobj\n", len); in ps_closepage()
659 pdf_obj(p, base + 2); in ps_closepage()
660 ps_printf(p, "<<\n/ProcSet [/PDF /Text]\n"); in ps_closepage()
661 ps_printf(p, "/Font <<\n"); in ps_closepage()
663 ps_printf(p, "/F%d %d 0 R\n", i, 3 + i); in ps_closepage()
664 ps_printf(p, ">>\n>>\n"); in ps_closepage()
667 pdf_obj(p, base + 3); in ps_closepage()
668 ps_printf(p, "<<\n"); in ps_closepage()
669 ps_printf(p, "/Type /Page\n"); in ps_closepage()
670 ps_printf(p, "/Parent 2 0 R\n"); in ps_closepage()
671 ps_printf(p, "/Resources %zu 0 R\n", base + 2); in ps_closepage()
672 ps_printf(p, "/Contents %zu 0 R\n", base); in ps_closepage()
673 ps_printf(p, ">>\nendobj\n"); in ps_closepage()
675 ps_printf(p, "showpage\n"); in ps_closepage()
677 p->ps->pages++; in ps_closepage()
678 p->ps->psrow = p->ps->top; in ps_closepage()
679 assert( ! (PS_NEWPAGE & p->ps->flags)); in ps_closepage()
680 p->ps->flags |= PS_NEWPAGE; in ps_closepage()
686 ps_end(struct termp *p) in ps_end() argument
696 if ( ! (PS_NEWPAGE & p->ps->flags)) { in ps_end()
697 assert(0 == p->ps->flags); in ps_end()
698 assert('\0' == p->ps->last); in ps_end()
699 ps_closepage(p); in ps_end()
702 if (TERMTYPE_PS == p->type) { in ps_end()
703 ps_printf(p, "%%%%Trailer\n"); in ps_end()
704 ps_printf(p, "%%%%Pages: %zu\n", p->ps->pages); in ps_end()
705 ps_printf(p, "%%%%EOF\n"); in ps_end()
709 pdf_obj(p, 2); in ps_end()
710 ps_printf(p, "<<\n/Type /Pages\n"); in ps_end()
711 ps_printf(p, "/MediaBox [0 0 %zu %zu]\n", in ps_end()
712 (size_t)AFM2PNT(p, p->ps->width), in ps_end()
713 (size_t)AFM2PNT(p, p->ps->height)); in ps_end()
715 ps_printf(p, "/Count %zu\n", p->ps->pages); in ps_end()
716 ps_printf(p, "/Kids ["); in ps_end()
718 for (i = 0; i < p->ps->pages; i++) in ps_end()
719 ps_printf(p, " %zu 0 R", i * 4 + in ps_end()
720 p->ps->pdfbody + 3); in ps_end()
722 base = (p->ps->pages - 1) * 4 + in ps_end()
723 p->ps->pdfbody + 4; in ps_end()
725 ps_printf(p, "]\n>>\nendobj\n"); in ps_end()
726 pdf_obj(p, base); in ps_end()
727 ps_printf(p, "<<\n"); in ps_end()
728 ps_printf(p, "/Type /Catalog\n"); in ps_end()
729 ps_printf(p, "/Pages 2 0 R\n"); in ps_end()
730 ps_printf(p, ">>\n"); in ps_end()
731 xref = p->ps->pdfbytes; in ps_end()
732 ps_printf(p, "xref\n"); in ps_end()
733 ps_printf(p, "0 %zu\n", base + 1); in ps_end()
734 ps_printf(p, "0000000000 65535 f \n"); in ps_end()
737 ps_printf(p, "%.10zu 00000 n \n", in ps_end()
738 p->ps->pdfobjs[(int)i]); in ps_end()
740 ps_printf(p, "trailer\n"); in ps_end()
741 ps_printf(p, "<<\n"); in ps_end()
742 ps_printf(p, "/Size %zu\n", base + 1); in ps_end()
743 ps_printf(p, "/Root %zu 0 R\n", base); in ps_end()
744 ps_printf(p, "/Info 1 0 R\n"); in ps_end()
745 ps_printf(p, ">>\n"); in ps_end()
746 ps_printf(p, "startxref\n"); in ps_end()
747 ps_printf(p, "%zu\n", xref); in ps_end()
748 ps_printf(p, "%%%%EOF\n"); in ps_end()
753 ps_begin(struct termp *p) in ps_begin() argument
763 if (p->ps->psmarg) { in ps_begin()
764 assert(p->ps->psmargsz); in ps_begin()
765 p->ps->psmarg[0] = '\0'; in ps_begin()
769 p->ps->psmargcur = 0; in ps_begin()
770 p->ps->flags = PS_MARGINS; in ps_begin()
771 p->ps->pscol = p->ps->left; in ps_begin()
772 p->ps->psrow = p->ps->header; in ps_begin()
774 ps_setfont(p, TERMFONT_NONE); in ps_begin()
776 (*p->headf)(p, p->argf); in ps_begin()
777 (*p->endline)(p); in ps_begin()
779 p->ps->pscol = p->ps->left; in ps_begin()
780 p->ps->psrow = p->ps->footer; in ps_begin()
782 (*p->footf)(p, p->argf); in ps_begin()
783 (*p->endline)(p); in ps_begin()
785 p->ps->flags &= ~PS_MARGINS; in ps_begin()
787 assert(0 == p->ps->flags); in ps_begin()
788 assert(p->ps->psmarg); in ps_begin()
789 assert('\0' != p->ps->psmarg[0]); in ps_begin()
798 if (TERMTYPE_PS == p->type) { in ps_begin()
799 ps_printf(p, "%%!PS-Adobe-3.0\n"); in ps_begin()
800 ps_printf(p, "%%%%CreationDate: %s", ctime(&t)); in ps_begin()
801 ps_printf(p, "%%%%DocumentData: Clean7Bit\n"); in ps_begin()
802 ps_printf(p, "%%%%Orientation: Portrait\n"); in ps_begin()
803 ps_printf(p, "%%%%Pages: (atend)\n"); in ps_begin()
804 ps_printf(p, "%%%%PageOrder: Ascend\n"); in ps_begin()
805 ps_printf(p, "%%%%DocumentMedia: " in ps_begin()
807 (size_t)AFM2PNT(p, p->ps->width), in ps_begin()
808 (size_t)AFM2PNT(p, p->ps->height)); in ps_begin()
809 ps_printf(p, "%%%%DocumentNeededResources: font"); in ps_begin()
812 ps_printf(p, " %s", fonts[i].name); in ps_begin()
814 ps_printf(p, "\n%%%%EndComments\n"); in ps_begin()
816 ps_printf(p, "%%PDF-1.1\n"); in ps_begin()
817 pdf_obj(p, 1); in ps_begin()
818 ps_printf(p, "<<\n"); in ps_begin()
819 ps_printf(p, ">>\n"); in ps_begin()
820 ps_printf(p, "endobj\n"); in ps_begin()
823 pdf_obj(p, (size_t)i + 3); in ps_begin()
824 ps_printf(p, "<<\n"); in ps_begin()
825 ps_printf(p, "/Type /Font\n"); in ps_begin()
826 ps_printf(p, "/Subtype /Type1\n"); in ps_begin()
827 ps_printf(p, "/Name /F%zu\n", i); in ps_begin()
828 ps_printf(p, "/BaseFont /%s\n", fonts[i].name); in ps_begin()
829 ps_printf(p, ">>\n"); in ps_begin()
833 p->ps->pdfbody = (size_t)TERMFONT__MAX + 3; in ps_begin()
834 p->ps->pscol = p->ps->left; in ps_begin()
835 p->ps->psrow = p->ps->top; in ps_begin()
836 p->ps->flags |= PS_NEWPAGE; in ps_begin()
837 ps_setfont(p, TERMFONT_NONE); in ps_begin()
842 ps_pletter(struct termp *p, int c) in ps_pletter() argument
851 if (PS_NEWPAGE & p->ps->flags) { in ps_pletter()
852 if (TERMTYPE_PS == p->type) { in ps_pletter()
853 ps_printf(p, "%%%%Page: %zu %zu\n", in ps_pletter()
854 p->ps->pages + 1, in ps_pletter()
855 p->ps->pages + 1); in ps_pletter()
856 ps_printf(p, "/%s %zu selectfont\n", in ps_pletter()
857 fonts[(int)p->ps->lastf].name, in ps_pletter()
858 p->ps->scale); in ps_pletter()
860 pdf_obj(p, p->ps->pdfbody + in ps_pletter()
861 p->ps->pages * 4); in ps_pletter()
862 ps_printf(p, "<<\n"); in ps_pletter()
863 ps_printf(p, "/Length %zu 0 R\n", in ps_pletter()
864 p->ps->pdfbody + 1 + in ps_pletter()
865 p->ps->pages * 4); in ps_pletter()
866 ps_printf(p, ">>\nstream\n"); in ps_pletter()
868 p->ps->pdflastpg = p->ps->pdfbytes; in ps_pletter()
869 p->ps->flags &= ~PS_NEWPAGE; in ps_pletter()
877 if ( ! (PS_INLINE & p->ps->flags)) { in ps_pletter()
878 if (TERMTYPE_PS != p->type) { in ps_pletter()
879 ps_printf(p, "BT\n/F%d %zu Tf\n", in ps_pletter()
880 (int)p->ps->lastf, in ps_pletter()
881 p->ps->scale); in ps_pletter()
882 ps_printf(p, "%.3f %.3f Td\n(", in ps_pletter()
883 AFM2PNT(p, p->ps->pscol), in ps_pletter()
884 AFM2PNT(p, p->ps->psrow)); in ps_pletter()
886 ps_printf(p, "%.3f %.3f moveto\n(", in ps_pletter()
887 AFM2PNT(p, p->ps->pscol), in ps_pletter()
888 AFM2PNT(p, p->ps->psrow)); in ps_pletter()
889 p->ps->flags |= PS_INLINE; in ps_pletter()
892 assert( ! (PS_NEWPAGE & p->ps->flags)); in ps_pletter()
907 ps_putchar(p, '\\'); in ps_pletter()
915 f = (int)p->ps->lastf; in ps_pletter()
918 ps_putchar(p, ' '); in ps_pletter()
919 p->ps->pscol += (size_t)fonts[f].gly[0].wx; in ps_pletter()
923 ps_putchar(p, (char)c); in ps_pletter()
925 p->ps->pscol += (size_t)fonts[f].gly[c].wx; in ps_pletter()
930 ps_pclose(struct termp *p) in ps_pclose() argument
939 if ( ! (PS_INLINE & p->ps->flags)) in ps_pclose()
942 if (TERMTYPE_PS != p->type) { in ps_pclose()
943 ps_printf(p, ") Tj\nET\n"); in ps_pclose()
945 ps_printf(p, ") show\n"); in ps_pclose()
947 p->ps->flags &= ~PS_INLINE; in ps_pclose()
952 ps_fclose(struct termp *p) in ps_fclose() argument
963 if ('\0' != p->ps->last) { in ps_fclose()
964 if (p->ps->lastf != TERMFONT_NONE) { in ps_fclose()
965 ps_pclose(p); in ps_fclose()
966 ps_setfont(p, TERMFONT_NONE); in ps_fclose()
968 ps_pletter(p, p->ps->last); in ps_fclose()
969 p->ps->last = '\0'; in ps_fclose()
972 if ( ! (PS_INLINE & p->ps->flags)) in ps_fclose()
975 ps_pclose(p); in ps_fclose()
980 ps_letter(struct termp *p, int arg) in ps_letter() argument
996 if ('\0' == p->ps->last) { in ps_letter()
998 p->ps->last = c; in ps_letter()
1000 } else if (8 == p->ps->last) { in ps_letter()
1002 p->ps->last = '\0'; in ps_letter()
1004 assert(8 != p->ps->last); in ps_letter()
1005 if ('_' == p->ps->last) { in ps_letter()
1006 if (p->ps->lastf != TERMFONT_UNDER) { in ps_letter()
1007 ps_pclose(p); in ps_letter()
1008 ps_setfont(p, TERMFONT_UNDER); in ps_letter()
1010 } else if (p->ps->lastf != TERMFONT_BOLD) { in ps_letter()
1011 ps_pclose(p); in ps_letter()
1012 ps_setfont(p, TERMFONT_BOLD); in ps_letter()
1014 p->ps->last = c; in ps_letter()
1017 if (p->ps->lastf != TERMFONT_NONE) { in ps_letter()
1018 ps_pclose(p); in ps_letter()
1019 ps_setfont(p, TERMFONT_NONE); in ps_letter()
1021 cc = p->ps->last; in ps_letter()
1022 p->ps->last = c; in ps_letter()
1026 ps_pletter(p, c); in ps_letter()
1031 ps_advance(struct termp *p, size_t len) in ps_advance() argument
1041 ps_fclose(p); in ps_advance()
1042 p->ps->pscol += len; in ps_advance()
1047 ps_endline(struct termp *p) in ps_endline() argument
1052 ps_fclose(p); in ps_endline()
1060 if (PS_MARGINS & p->ps->flags) in ps_endline()
1065 p->ps->pscol = p->ps->left; in ps_endline()
1069 if (PS_NEWPAGE & p->ps->flags) in ps_endline()
1077 if (p->ps->psrow >= p->ps->lineheight + in ps_endline()
1078 p->ps->bottom) { in ps_endline()
1079 p->ps->psrow -= p->ps->lineheight; in ps_endline()
1083 ps_closepage(p); in ps_endline()
1088 ps_setfont(struct termp *p, enum termfont f) in ps_setfont() argument
1092 p->ps->lastf = f; in ps_setfont()
1099 if (PS_NEWPAGE & p->ps->flags) in ps_setfont()
1102 if (TERMTYPE_PS == p->type) in ps_setfont()
1103 ps_printf(p, "/%s %zu selectfont\n", in ps_setfont()
1105 p->ps->scale); in ps_setfont()
1107 ps_printf(p, "/F%d %zu Tf\n", in ps_setfont()
1109 p->ps->scale); in ps_setfont()
1115 ps_width(const struct termp *p, int c) in ps_width() argument
1127 ps_hspan(const struct termp *p, const struct roffsu *su) in ps_hspan() argument
1138 r = PNT2AFM(p, su->scale * 28.34); in ps_hspan()
1141 r = PNT2AFM(p, su->scale * 72); in ps_hspan()
1144 r = PNT2AFM(p, su->scale * 12); in ps_hspan()
1147 r = PNT2AFM(p, su->scale * 100); in ps_hspan()
1154 r = PNT2AFM(p, su->scale * 2.834); in ps_hspan()
1161 r = su->scale * p->ps->lineheight; in ps_hspan()
1172 ps_growbuf(struct termp *p, size_t sz) in ps_growbuf() argument
1174 if (p->ps->psmargcur + sz <= p->ps->psmargsz) in ps_growbuf()
1180 p->ps->psmargsz += sz; in ps_growbuf()
1182 p->ps->psmarg = mandoc_realloc in ps_growbuf()
1183 (p->ps->psmarg, p->ps->psmargsz); in ps_growbuf()