diff options
author | Hans Hagen <pragma@wxs.nl> | 1997-10-28 00:00:00 +0100 |
---|---|---|
committer | Hans Hagen <pragma@wxs.nl> | 1997-10-28 00:00:00 +0100 |
commit | 4da38599c2b3c2397582838a9ac715897af7b1a8 (patch) | |
tree | 143f0325bc01f46719da582c7ee7cfd95aba8de1 /tex/context/base/spec-pdf.tex | |
download | context-4da38599c2b3c2397582838a9ac715897af7b1a8.tar.gz |
stable 1997.10.28
Diffstat (limited to 'tex/context/base/spec-pdf.tex')
-rw-r--r-- | tex/context/base/spec-pdf.tex | 456 |
1 files changed, 456 insertions, 0 deletions
diff --git a/tex/context/base/spec-pdf.tex b/tex/context/base/spec-pdf.tex new file mode 100644 index 000000000..bf3fec519 --- /dev/null +++ b/tex/context/base/spec-pdf.tex @@ -0,0 +1,456 @@ +%D \module
+%D [ file=spec-pdf,
+%D version=1997.09.20,
+%D title=\CONTEXT\ Special Macros,
+%D subtitle=Adobe \PDF\ version 1.2,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. Non||commercial use is
+%C granted.
+
+\unprotect
+
+%D \macros
+%D {dosetupinteraction,
+%D dosetupscreen,
+%D dosetupidentity,
+%D dostartthisislocation,
+%D dostartgotolocation,
+%D dostartgotorealpage,
+%D dostartcommand,
+%D dostartgotoprofile,
+%D dobeginofprofile,
+%D doendofprofile,
+%D dostartrunprogram,
+%D dostartobject,
+%D dostopobject,
+%D doinsertobject,
+%D doinsertbookmark,
+%D usepagedestinations}
+%D {}
+%D
+%D These specials are not as beautiful as they should be. The
+%D main reason for this is that we started with \DVIWINDO,
+%D which lacks support of \EPS||insertions, but offered a
+%D powerfull linking mechanism. The first version
+%D of \PDF\ did not support labels but only pagenumbers.
+%D This dreadfull omission was corrected in version 2.0, but
+%D we continue to support both alternatives. One never knows.
+%D
+%D Although the concepts behind the \type{pdfmark}'s are
+%D still far from perfect, version 2.1 brought another
+%D change. This time the format was changed. So much for
+%D upward compatibility.
+
+\startspecials[pdf]
+
+%D Instead of a prolog, we can put the code in the file
+%D ourselve.
+%D
+%D \starttypen
+%D \definespecial\dosetupinteraction%
+%D {\special
+%D {\@@insertpostscriptretain
+%D /pdfmark where
+%D {pop}
+%D {userdict /pdfmark /cleartomark load put}
+%D ifelse}}
+%D \stoptypen
+%D
+%D We decided to use a prolog file. The following code has to be
+%D put somewhere. To overcome problems, we always embed the
+%D fonts, but copyrights force us always to make subsets.
+%D
+%D \starttypen
+%D /currentdistillerparams where
+%D { pop } { userdict /currentdistillerparams { 1 dict } put } ifelse
+%D
+%D /setdistillerparams where
+%D { pop } { userdict /setdistillerparams { pop } put } ifelse
+%D
+%D << /AntiAliasColorImages true
+%D /AntiAliasGrayImages true
+%D /AntiAliasMonoImages true
+%D /ConvertCMYKImagesToRGB true
+%D /MaxSubsetPct 99
+%D /EmbedAllFonts true
+%D /SubSetFonts true >> setdistillerparams
+%D \stoptypen
+%D
+%D Beware, this is the PostScript Level 2 way of doing things.
+
+\definespecial\dosetupinteraction%
+ {\showmessage{\m!interactions}{21}{acrobat}}
+
+\definespecial\dostartthisislocation#1%
+ {\ifusepagedestinations \else
+ \setPDFdestination{#1}%
+ \doifsomething{\PDFdestination}
+ {\special
+ {\@@insertpostscriptretain
+ [/Dest /\PDFdestination\space
+% [/Dest (\PDFdestination)
+ /View [/Fit]
+ /DEST
+ pdfmark}}%
+ \fi}
+
+\definespecial\dostartgotolocation#1#2#3#4#5#6%
+ {\bgroup
+ \ScaledPointsToBigPoints{#1}\width
+ \ScaledPointsToBigPoints{#2}\height
+ \doifelsenothing{#3}
+ {\doifelsenothing{#4}
+ {\!!doneafalse}
+ {\doifparentfileelse{#4}
+ {\!!doneafalse}
+ {\!!doneatrue}}%
+ \ifusepagedestinations
+ \doifnot{0#6}{0}
+ {\special
+ {\@@insertpostscriptretain
+ [\if!!donea
+ /Action /GoToR
+ /File (#4.pdf)
+ \else
+ /Action /GoTo
+ \fi
+ /Rect [0 0 \width\space \height]
+ /Border [0 0 0]
+ /Page #6
+ /View [/Fit]
+ /Subtype /Link
+ /ANN
+ pdfmark}}%
+ \else
+ \setPDFdestination{#5}%
+ \doifsomething{\PDFdestination}
+ {\special
+ {\@@insertpostscriptretain
+ [\if!!donea
+ /Action /GoToR
+ /File (#4.pdf)
+ \else
+ /Action /GoTo
+ \fi
+ /Rect [0 0 \width\space \height]
+ /Border [0 0 0]
+ /Dest /\PDFdestination\space
+% /Dest (\PDFdestination)
+ /Subtype /Link
+ /ANN
+ pdfmark}}%
+ \fi}
+ {\doifelsenothing{#4}
+ {\let\PDFfile=\empty
+ \let\PDFdestination=\empty}
+ {\edef\PDFfile{/#4}%
+ \setPDFdestination{#5}%
+ \doifsomething{\PDFdestination}
+ {\edef\PDFdestination{\URLhash\PDFdestination}}}%
+ \special
+ {\@@insertpostscriptretain
+ [/Action <</Subtype /URI /URI (#3\PDFfile\PDFdestination)>>
+ /Rect [0 0 \width\space \height]
+ /Border [0 0 0]
+ /Subtype /Link
+ /ANN
+ pdfmark}}%
+ \egroup}
+
+\definespecial\dostartgotorealpage#1#2#3#4#5%
+ {\bgroup
+ \ScaledPointsToBigPoints{#1}\width
+ \ScaledPointsToBigPoints{#2}\height
+ \doifelsenothing{#3}
+ {\doifelsenothing{#4}
+ {\!!doneafalse}
+ {\doifparentfileelse{#4}
+ {\!!doneafalse}
+ {\!!doneatrue}}%
+ \doifnot{0#5}{0}
+ {\special
+ {\@@insertpostscriptretain
+ [\if!!donea
+ /Action /GoToR
+ /File (#4.pdf)
+ \else
+ /Action /GoTo
+ \fi
+ /Rect [0 0 \width\space \height]
+ /Border [0 0 0]
+ /View [/Fit]
+ /Page #5
+ /Subtype /Link
+ /ANN
+ pdfmark}}}
+ {\doifelsenothing{#4}
+ {\let\PDFfile=\empty}
+ {\edef\PDFfile{/#4}}%
+ \special
+ {\@@insertpostscriptretain
+ [/Action <</Subtype /URI /URI (#3\PDFfile)>>
+ /Rect [0 0 \width\space \height]
+ /Border [0 0 0]
+ /Subtype /Link
+ /ANN
+ pdfmark}}%
+ \egroup}
+
+\definespecial\dostartexecutecommand#1#2#3#4%
+ {\bgroup
+ \ScaledPointsToBigPoints{#1}\width
+ \ScaledPointsToBigPoints{#2}\height
+ \processaction
+ [#3]
+ [ first=>\def\command{First},
+ previous=>\def\command{Prev},
+ next=>\def\command{Next},
+ last=>\def\command{Last},
+ backward=>\def\command{GoBack},
+ forward=>\def\command{GoForward},
+ print=>\def\command{Print},
+ exit=>\def\command{Quit},
+ close=>\def\command{Close},
+ help=>\def\command{HelpUserGuide},
+ swap=>\def\command{FullScreen},
+ search=>\def\command{Find},
+ searchagain=>\def\command{FindAgain},
+ \s!unknown=>\let\command=\s!unknown]%
+ \special
+ {\@@insertpostscriptretain
+ [/Action <</Subtype /Named /N /\command>>
+ /Rect [0 0 \width\space \height]
+ /Border [0 0 0]
+ /Subtype /Link
+ /ANN
+ pdfmark}%
+ \egroup}
+
+\definespecial\dostopexecutecommand%
+ {}
+
+% \def\translatepdfcommand#1%
+% {\processaction
+% [#1]
+% [ first=>\def\command{First},
+% previous=>\def\command{Prev},
+% next=>\def\command{Next},
+% last=>\def\command{Last},
+% backward=>\def\command{GoBack},
+% forward=>\def\command{GoForward},
+% print=>\def\command{Print},
+% exit=>\def\command{Quit},
+% help=>\def\command{HelpUserGuide},
+% enter=>\def\command{FitPage},
+% view=>\def\command{FullScreen},
+% \s!unknown=>\let\command=\s!unknown]}
+%
+% \definespecial\dostartexecutecommand#1#2#3#4%
+% {\bgroup
+% \ScaledPointsToBigPoints{#1}\width
+% \ScaledPointsToBigPoints{#2}\height
+% \def\nextcommands{}%
+% \getcommalistsize[#1]%
+% \dostepwiserecurse{2}{\commalistsize}{1}
+% {\getfromcommalist[#1][\recurselevel]%
+% \translatepdfcommand\commalistelement
+% \edef\nextcommands%
+% {\nextcommands /Next << /Type /Action /S /Named /N /\command\space}}%
+% \dostepwiserecurse{2}{\commalistsize}{1}
+% {\edef\nextcommands{\nextcommands >>}}%
+% \getfromcommalist[#1][1]%
+% \translatepdfcommand\commalistelement
+% \special
+% {\@@insertpostscriptretain
+% [/Action << /Subtype /Named /N /\command\space \nextcommands >>
+% /Rect [0 0 100 100 ]
+% /Subtype /Link
+% /ANN
+% pdfmark}%
+% \egroup}
+
+\edef\@@psbgroup{\string{}
+\edef\@@psegroup{\string}}
+
+\definespecial\dostarthide%
+ {\special
+ {\@@insertpostscriptretain
+ [/DataSource (false \@@psbgroup)
+ /PS
+ pdfmark}}
+
+\definespecial\dostophide%
+ {\special
+ {\@@insertpostscriptretain
+ [/DataSource (\@@psegroup if)
+ /PS
+ pdfmark}}
+
+\definespecial\dosetupscreen#1#2#3#4#5%
+ {\bgroup
+ \!!widtha=#3sp
+ \advance\!!widtha by #1sp
+ \!!heighta=-#4sp
+ \!!heightb=\printpapierhoogte
+ \advance\!!heightb by -#2sp
+ \advance\!!heighta by \!!heightb
+ %\ScaledPointsToBigPoints{#1}\left
+ %\ScaledPointsToBigPoints{\number\!!heighta}\bottom
+ %\ScaledPointsToBigPoints{\number\!!widtha}\width
+ %\ScaledPointsToBigPoints{\number\!!heightb}\height
+ \ScaledPointsToWholeBigPoints{#1}\left
+ \ScaledPointsToWholeBigPoints{\number\!!heighta}\bottom
+ \ScaledPointsToWholeBigPoints{\number\!!widtha}\width
+ \ScaledPointsToWholeBigPoints{\number\!!heightb}\height
+ \edef\pdf@@screenmode{\ifcase#5/UseNone\else/FullScreen\fi}%
+ \special
+ {\@@insertpostscriptretain
+ [/CropBox [\left\space\bottom\space\width\space\height]
+ /PAGES
+ pdfmark}%
+ \special
+ {\@@insertpostscriptretain
+ [/PageMode \pdf@@screenmode\space
+ /Page 1
+ /View [/Fit]
+ /ViewerPreferences
+ << /PageLayout /SinglePage
+ /NonFullScreenPageMode /UseNone >>
+ /DOCVIEW
+ pdfmark}%
+ \egroup}
+
+\definespecial\dosetupidentity#1#2#3#4#5%
+ {\special
+ {\@@insertpostscriptretain
+ [/Title (#1)
+ /Subject (#2)
+ /Author (#3)
+ /Creator (#4)
+ /ModificationDate (#5)
+ /DOCINFO
+ pdfmark}}
+
+\definespecial\dostartrunprogram#1#2#3%
+ {\bgroup
+ \ScaledPointsToBigPoints{#1}\width
+ \ScaledPointsToBigPoints{#2}\height
+ \special
+ {\@@insertpostscriptretain
+ [/Action /Launch
+ /File (#3)
+ /Rect [0 0 \width\space \height]
+ /Border [0 0 0]
+ /Subtype /Link
+ /ANN
+ pdfmark}%
+ \egroup}
+
+\definespecial\dostartgotoprofile#1#2#3%
+ {\bgroup
+ \ScaledPointsToBigPoints{#1}\width
+ \ScaledPointsToBigPoints{#2}\height
+ \doifsomething{#3}
+ {\special
+ {\@@insertpostscriptretain
+ [/Action /Article
+ /Dest (#3)
+ /Rect [0 0 \width\space \height]
+ /Border [0 0 0]
+ /View [/Fit]
+ /Subtype /Link
+ /ANN
+ pdfmark}}%
+ \egroup}
+
+\definespecial\dobeginofprofile#1#2#3% label width page
+ {\bgroup
+ \doifelsenothing{#1}
+ {\!!doneatrue}
+ {\!!doneafalse}%
+ \doifnot{0#3}{0}
+ {\special
+ {\@@insertpostscriptretain
+ [/Title (#1)
+ /Rect [0 0 0 0]
+ \if!!donea /Page #3 \fi
+ /ARTICLE
+ pdfmark}}%
+ \egroup}
+
+\definespecial\doendofprofile#1#2#3%
+ {}
+
+\def\docommoninsertmov#1#2#3#4#5#6#7#8%
+ {\bgroup
+ \ScaledPointsToBigPoints{#6}\width
+ \ScaledPointsToBigPoints{#7}\height
+ \edef\pdf@@posterize{\ifcase#8 \or/Poster true\fi}%
+ \special
+ {\@@insertpostscriptretain
+ [/Type /Annot
+ /Subtype /Movie
+ /Rect [0 0 \width\space \height]
+ /Movie <</F (#1) /Aspect [\width\space \height] \pdf@@posterize>>
+ /A <</ShowControls false>>
+ /ANN
+ pdfmark}%
+ \egroup}
+
+\let\doyandyinsertmov = \docommoninsertmov
+\let\dotrinsertmov = \docommoninsertmov
+
+\newbox\pdfobjects
+
+\definespecial\dostartobject#1#2#3#4%
+ {\setbox\nextbox=\hbox\bgroup
+ \bgroup
+ \ScaledPointsToBigPoints{#2}\width
+ \ScaledPointsToBigPoints{#3}\height
+ \ScaledPointsToBigPoints{#4}\depth
+ \escapechar=-1
+ \special
+ {\@@insertpostscriptretain
+ [/BBox [0 -\depth\space \width\space \height]
+ /_objdef {object:#1}
+ /BP pdfmark}%
+ \egroup}
+
+\definespecial\dostopobject%
+ {\special
+ {\@@insertpostscriptretain
+ [/EP pdfmark}%
+ \egroup
+ \smashbox\nextbox
+ \global\setbox\pdfobjects=\hbox{\box\pdfobjects\box\nextbox}}
+
+\definespecial\doinsertobject#1%
+ {\hbox\bgroup
+ \box\pdfobjects
+ \escapechar=-1
+ \special
+ {\@@insertpostscriptretain
+ [{object:#1} /SP pdfmark}%
+ \egroup}
+
+\definespecial\doinsertbookmark#1#2#3#4#5% level sublevels text page open (1)
+ {\sanitizePDFstring#3\to\bookmarktext
+ \special
+ {\@@insertpostscriptretain
+ [/Page #4\space
+ \ifnum#2>0 /Count \ifcase#5-\fi#2\space\fi
+ /View [/Fit]
+ /Title (\bookmarktext)
+ /OUT
+ pdfmark}}
+
+\stopspecials
+
+\protect
+
+\endinput
+
\ No newline at end of file |