1
0
mirror of synced 2026-02-05 16:25:11 +00:00

PDF Stream: slight generalization

This commit is contained in:
rmkaplan
2023-09-12 13:49:56 -07:00
parent 9b4c4a3bf7
commit 781709e4e1
2 changed files with 55 additions and 44 deletions

View File

@@ -1,12 +1,13 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "17-Jul-2023 22:33:21" {WMEDLEY}<library>PDFSTREAM.;38 12982 (FILECREATED "24-Jul-2023 10:37:31" {WMEDLEY}<library>PDFSTREAM.;44 13139
:EDIT-BY rmk :EDIT-BY rmk
:CHANGES-TO (FNS CLOSE-PDF-STREAM) :CHANGES-TO (VARS PDFSTREAMCOMS)
(FNS PDF.HARDCOPYW CLOSE-PDF-STREAM PS-TO-PDF PDF-CONVERT)
:PREVIOUS-DATE " 2-Jul-2023 17:00:18" {WMEDLEY}<library>PDFSTREAM.;37) :PREVIOUS-DATE "19-Jul-2023 09:28:33" {WMEDLEY}<library>PDFSTREAM.;40)
(PRETTYCOMPRINT PDFSTREAMCOMS) (PRETTYCOMPRINT PDFSTREAMCOMS)
@@ -27,15 +28,18 @@
(FONTCREATE POSTSCRIPT.FONTCREATE) (FONTCREATE POSTSCRIPT.FONTCREATE)
(FONTSAVAILABLE POSTSCRIPT.FONTSAVAILABLE) (FONTSAVAILABLE POSTSCRIPT.FONTSAVAILABLE)
(CREATECHARSET \CREATECHARSET.PSC] (CREATECHARSET \CREATECHARSET.PSC]
(DECLARE%: EVAL@COMPILE DONTCOPY (FILES EXPORTS.ALL (LOADCOMP) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (FROM LOADUPS)
POSTSCRIPTSTREAM)) EXPORTS.ALL)
(FILES (LOADCOMP)
POSTSCRIPTSTREAM))
(FNS PDFFILEP PDF.HARDCOPYW PDF.TEXT PDF.TEDIT) (FNS PDFFILEP PDF.HARDCOPYW PDF.TEXT PDF.TEDIT)
(INITVARS (PDFCONVERTER 'ps2pdf)) (INITVARS (PDFCONVERTER 'ps2pdf))
(ALISTS (PDF-CONVERTER-TEMPLATES ps2pdf pstopdf)) (ALISTS (PDF-CONVERTER-TEMPLATES ps2pdf pstopdf))
(VARS (DEFAULTPRINTERTYPE 'PDF)) (VARS (DEFAULTPRINTERTYPE 'PDF))
(GLOBALVARS PDFCONVERTER \PDFIMAGEOPS PDF-CONVERTER-TEMPLATES) (GLOBALVARS PDFCONVERTER \PDFIMAGEOPS PDF-CONVERTER-TEMPLATES)
(FNS PDF-INIT OPEN-PDF-STREAM CLOSE-PDF-STREAM PDF-CONVERT) (FNS PDF-INIT OPEN-PDF-STREAM CLOSE-PDF-STREAM PS-TO-PDF)
(P (PDF-INIT)))) (P (MOVD? 'CL:IDENTITY 'TRUEFILENAME)
(PDF-INIT))))
(ADDTOVAR PRINTERTYPES ((PDF) (ADDTOVAR PRINTERTYPES ((PDF)
(CANPRINT (PDF)) (CANPRINT (PDF))
@@ -55,7 +59,11 @@
(CREATECHARSET \CREATECHARSET.PSC))) (CREATECHARSET \CREATECHARSET.PSC)))
(DECLARE%: EVAL@COMPILE DONTCOPY (DECLARE%: EVAL@COMPILE DONTCOPY
(FILESLOAD EXPORTS.ALL (LOADCOMP) (FILESLOAD (FROM LOADUPS)
EXPORTS.ALL)
(FILESLOAD (LOADCOMP)
POSTSCRIPTSTREAM) POSTSCRIPTSTREAM)
) )
(DEFINEQ (DEFINEQ
@@ -81,10 +89,11 @@
(SETFILEPTR FILE 0)))]) (SETFILEPTR FILE 0)))])
(PDF.HARDCOPYW (PDF.HARDCOPYW
[LAMBDA (FILE BITMAP SCALEFACTOR REGION Landscape? TITLE) (* ; "Edited 23-Jun-2023 13:28 by rmk") [LAMBDA (FILE BITMAP SCALEFACTOR REGION Landscape? TITLE) (* ; "Edited 24-Jul-2023 10:37 by rmk")
(* ; "Edited 23-Jun-2023 13:28 by rmk")
(* ; "Edited 6-Mar-2023 22:43 by rmk") (* ; "Edited 6-Mar-2023 22:43 by rmk")
(LET ((PSTTMP (PACKFILENAME 'EXTENSION 'TMPPS 'BODY FILE))) (LET ((PSTTMP (PACKFILENAME 'EXTENSION 'TMPPS 'BODY FILE)))
(PDF-CONVERT (POSTSCRIPT.HARDCOPYW PSTTMP FILE BITMAP SCALEFACTOR REGION Landscape? TITLE) (PS-TO-PDF (POSTSCRIPT.HARDCOPYW PSTTMP FILE BITMAP SCALEFACTOR REGION Landscape? TITLE)
FILE]) FILE])
(PDF.TEXT (PDF.TEXT
@@ -105,9 +114,8 @@
(RPAQ? PDFCONVERTER 'ps2pdf) (RPAQ? PDFCONVERTER 'ps2pdf)
(ADDTOVAR PDF-CONVERTER-TEMPLATES (ps2pdf " " PSTMPFILENAME " " PDFTMPFILENAME " 2> " ERRORFILENAME) (ADDTOVAR PDF-CONVERTER-TEMPLATES (ps2pdf " " PSFILE " " PDFFILE " 2> " ERRORFILE)
(pstopdf " " PSTMPFILENAME " -o " PDFTMPFILENAME " 2> " (pstopdf " " PSFILE " -o " PDFFILE " 2> " ERRORFILE))
ERRORFILENAME))
(RPAQQ DEFAULTPRINTERTYPE PDF) (RPAQQ DEFAULTPRINTERTYPE PDF)
(DECLARE%: DOEVAL@COMPILE DONTCOPY (DECLARE%: DOEVAL@COMPILE DONTCOPY
@@ -160,7 +168,8 @@
PSSTREAM]) PSSTREAM])
(CLOSE-PDF-STREAM (CLOSE-PDF-STREAM
[LAMBDA (PSSTREAM) (* ; "Edited 17-Jul-2023 22:32 by rmk") [LAMBDA (PSSTREAM) (* ; "Edited 24-Jul-2023 10:37 by rmk")
(* ; "Edited 17-Jul-2023 22:32 by rmk")
(* ; "Edited 24-Jun-2023 13:57 by rmk") (* ; "Edited 24-Jun-2023 13:57 by rmk")
(* ;; "PSSTREAM is a tmp/ postscript rendition of what is intended to end up as a pdf. If we are going directly to a printer, we can probably just pass it along without worrying about conversion. In fact, in that case we probably should not have bothered even setting up the PDF stream.") (* ;; "PSSTREAM is a tmp/ postscript rendition of what is intended to end up as a pdf. If we are going directly to a printer, we can probably just pass it along without worrying about conversion. In fact, in that case we probably should not have bothered even setting up the PDF stream.")
@@ -171,25 +180,29 @@
(CL:WHEN (EQ \PDFIMAGEOPS (fetch (STREAM IMAGEOPS) of PSSTREAM)) (CL:WHEN (EQ \PDFIMAGEOPS (fetch (STREAM IMAGEOPS) of PSSTREAM))
(replace (STREAM IMAGEOPS) of PSSTREAM with \POSTSCRIPTIMAGEOPS) (replace (STREAM IMAGEOPS) of PSSTREAM with \POSTSCRIPTIMAGEOPS)
(PDF-CONVERT (CLOSEF PSSTREAM) (RENAMEFILE (PS-TO-PDF (CLOSEF PSSTREAM))
(fetch (\POSTSCRIPTDATA POSTSCRIPTTARGETINFO) of (fetch (STREAM IMAGEDATA) (fetch (\POSTSCRIPTDATA POSTSCRIPTTARGETINFO) of (fetch (STREAM IMAGEDATA)
of PSSTREAM))))]) of PSSTREAM))))])
(PDF-CONVERT (PS-TO-PDF
[LAMBDA (PSTMPFILENAME TARGETPDFNAME DONTDELETE) (* ; "Edited 24-Jun-2023 15:01 by rmk") [LAMBDA (PSFILE PDFFILE DONTDELETE) (* ; "Edited 23-Jul-2023 22:30 by rmk")
(* ; "Edited 24-Jun-2023 15:01 by rmk")
(* ; "Edited 16-Jul-2022 13:06 by rmk") (* ; "Edited 16-Jul-2022 13:06 by rmk")
(* ; "Edited 8-Jul-2022 10:20 by rmk") (* ; "Edited 8-Jul-2022 10:20 by rmk")
(* ; "Edited 7-May-2022 22:40 by rmk") (* ; "Edited 7-May-2022 22:40 by rmk")
(* ; "Edited 7-Oct-2021 11:15 by rmk:") (* ; "Edited 7-Oct-2021 11:15 by rmk:")
(* ;; "PSTMPFILENAME is the name of a closed PS file in a Unix tmp directory. This function uses the PDFCONVERTER utility to convert that to a parallel pdf file, which is then renamed to TARGETPDFNAME. ") (* ;; "PSFILE is the name of a closed PS file on a DSK/UNIX device. This function uses the PDFCONVERTER utility to convert that to a parallel pdf file, which is then renamed to PDFFILE. ")
(* ;; "DONTDELETE is just for debugging, keeps the /tmp/ files") (* ;; "DONTDELETE is just for debugging, keeps the /tmp/ files")
(CL:UNLESS (INFILEP PSTMPFILENAME) (SETQ PSFILE (TRUEFILENAME PSFILE))
(SETQ PDFFILE (if PDFFILE
then (TRUEFILENAME PDFFILE)
else (PACKFILENAME 'EXTENSION 'pdf 'BODY PSFILE)))
(CL:UNLESS (INFILEP PSFILE)
(ERROR "NO PS FILE TO CONVERT")) (ERROR "NO PS FILE TO CONVERT"))
(LET ((PDFTMPFILENAME (PACKFILENAME 'EXTENSION 'pdf 'BODY PSTMPFILENAME)) (LET ((ERRORFILE (PACKFILENAME 'EXTENSION 'error 'BODY PSFILE))
(ERRORFILENAME (PACKFILENAME 'EXTENSION 'error 'BODY PSTMPFILENAME))
COMPLETIONCODE) COMPLETIONCODE)
(* ;; "PROCESS-COMMAND is currently from GITFNS. Not sure whether ShellCommand in UNIXUTILS is appropriate.") (* ;; "PROCESS-COMMAND is currently from GITFNS. Not sure whether ShellCommand in UNIXUTILS is appropriate.")
@@ -197,17 +210,13 @@
(* ;; "We have to map the filenames down to Unix conventions: (not host, slashes, etc.") (* ;; "We have to map the filenames down to Unix conventions: (not host, slashes, etc.")
[SETQ COMPLETIONCODE (PROCESS-COMMAND [SETQ COMPLETIONCODE (PROCESS-COMMAND
(CONCATLIST (SUBLIS `[(PSTMPFILENAME \, (SLASHIT (PACKFILENAME (CONCATLIST (SUBLIS `[(PSFILE \, (SLASHIT (PACKFILENAME 'HOST NIL
'HOST NIL 'BODY PSFILE)))
'BODY PSTMPFILENAME) (PDFFILE \, (SLASHIT (PACKFILENAME 'HOST NIL
)) 'BODY PDFFILE)))
(PDFTMPFILENAME \, (SLASHIT (PACKFILENAME (ERRORFILE \, (SLASHIT (PACKFILENAME
'HOST NIL 'HOST NIL 'BODY
'BODY ERRORFILE]
PDFTMPFILENAME)))
(ERRORFILENAME \, (SLASHIT (PACKFILENAME
'HOST NIL
'BODY ERRORFILENAME]
(ASSOC (OR PDFCONVERTER (MKATOM (UNIX-GETENV (ASSOC (OR PDFCONVERTER (MKATOM (UNIX-GETENV
"MEDLEY-PDFCONVERTER" "MEDLEY-PDFCONVERTER"
))) )))
@@ -215,22 +224,24 @@
(* ;; "Now use Medley names") (* ;; "Now use Medley names")
(CLOSEF? PSTMPFILENAME) (CLOSEF? PSFILE)
(CL:UNLESS DONTDELETE (DELFILE PSTMPFILENAME)) (CL:UNLESS DONTDELETE (DELFILE PSFILE))
(CLOSEF? ERRORFILENAME) (CLOSEF? ERRORFILE)
(CL:WHEN (INFILEP ERRORFILENAME) (CL:WHEN (INFILEP ERRORFILE)
(CL:WHEN (IGREATERP (PROG1 (GETFILEINFO ERRORFILENAME 'LENGTH) (CL:WHEN (IGREATERP (PROG1 (GETFILEINFO ERRORFILE 'LENGTH)
(CL:UNLESS DONTDELETE (DELFILE ERRORFILENAME))) (CL:UNLESS DONTDELETE (DELFILE ERRORFILE)))
0) 0)
(ERROR "Cannot create PDF file for " TARGETPDFNAME))) (ERROR "Cannot create PDF file for " PDFFILE)))
(CL:WHEN (IGREATERP COMPLETIONCODE 0) (CL:WHEN (IGREATERP COMPLETIONCODE 0)
(ERROR "Cannot create PDF file for " TARGETPDFNAME)) (ERROR "Cannot create PDF file for " PDFFILE))
(RENAMEFILE PDFTMPFILENAME TARGETPDFNAME]) PDFFILE])
) )
(MOVD? 'CL:IDENTITY 'TRUEFILENAME)
(PDF-INIT) (PDF-INIT)
(DECLARE%: DONTCOPY (DECLARE%: DONTCOPY
(FILEMAP (NIL (2710 5044 (PDFFILEP 2720 . 3634) (PDF.HARDCOPYW 3636 . 4063) (PDF.TEXT 4065 . 4673) ( (FILEMAP (NIL (2929 5370 (PDFFILEP 2939 . 3853) (PDF.HARDCOPYW 3855 . 4389) (PDF.TEXT 4391 . 4999) (
PDF.TEDIT 4675 . 5042)) (5470 12943 (PDF-INIT 5480 . 6205) (OPEN-PDF-STREAM 6207 . 8310) ( PDF.TEDIT 5001 . 5368)) (5718 13064 (PDF-INIT 5728 . 6453) (OPEN-PDF-STREAM 6455 . 8558) (
CLOSE-PDF-STREAM 8312 . 9496) (PDF-CONVERT 9498 . 12941))))) CLOSE-PDF-STREAM 8560 . 9864) (PS-TO-PDF 9866 . 13062)))))
STOP STOP

Binary file not shown.