summaryrefslogtreecommitdiff
path: root/tex/context/base/back-pdf.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/back-pdf.mkiv')
-rw-r--r--tex/context/base/back-pdf.mkiv178
1 files changed, 178 insertions, 0 deletions
diff --git a/tex/context/base/back-pdf.mkiv b/tex/context/base/back-pdf.mkiv
new file mode 100644
index 000000000..a10afd5b9
--- /dev/null
+++ b/tex/context/base/back-pdf.mkiv
@@ -0,0 +1,178 @@
+%D \module
+%D [ file=back-pdf,
+%D version=2009.04.15,
+%D title=\CONTEXT\ Backend Macros,
+%D subtitle=\PDF,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Backend Macros / PDF}
+
+\registerctxluafile{back-pdf}{1.001} % this will change
+
+\unprotect
+
+%D We will minimize the number of calls to \PDF\ specific primitives
+%D and delegate all management and injection of code to the backend.
+%D
+%D Here we initialize some internal quantities.
+
+\pdfoutput = 1
+\pdfhorigin = 1 true in
+\pdfvorigin = 1 true in
+\pdfimageresolution = 300
+\pdfpkresolution = 600
+\pdfdecimaldigits = 10
+\pdfinclusionerrorlevel = 0
+\pdfminorversion = 6 % maybe even 7
+%pdfuniqueresname = 1
+
+%D This one can be consulted by users although the suffix is also
+%D a system mode.
+
+\setjobsuffix{pdf}
+
+%D For the moment we keep these.
+
+\newtoks \pdfbackendeveryximage
+\newtoks \pdfbackendeveryxform
+
+%D These are the only official methods to add stuff to the resources.
+
+\def\pdfbackendsetcatalog #1#2{\ctxlua{lpdf.addtocatalog ("#1",\!!bs#2\!!es)}}
+\def\pdfbackendsetinfo #1#2{\ctxlua{lpdf.addtoinfo ("#1",\!!bs#2\!!es)}}
+\def\pdfbackendsetname #1#2{\ctxlua{lpdf.addtonames ("#1",\!!bs#2\!!es)}}
+
+\def\pdfbackendsetpageattribute #1#2{\ctxlua{lpdf.addtopageattributes ("#1",\!!bs#2\!!es)}}
+\def\pdfbackendsetpagesattribute#1#2{\ctxlua{lpdf.addtopagesattributes("#1",\!!bs#2\!!es)}}
+\def\pdfbackendsetpageresource #1#2{\ctxlua{lpdf.addtopageresources ("#1",\!!bs#2\!!es)}}
+
+\def\pdfbackendsetextgstate #1#2{\ctxlua{lpdf.adddocumentextgstate ("#1",lpdf.verbose(\!!bs#2\!!es))}}
+\def\pdfbackendsetcolorspace #1#2{\ctxlua{lpdf.adddocumentcolorspace("#1",lpdf.verbose(\!!bs#2\!!es))}}
+\def\pdfbackendsetpattern #1#2{\ctxlua{lpdf.adddocumentpattern ("#1",lpdf.verbose(\!!bs#2\!!es))}}
+\def\pdfbackendsetshade #1#2{\ctxlua{lpdf.adddocumentshade ("#1",lpdf.verbose(\!!bs#2\!!es))}}
+
+\def\pdfbackendcurrentresources {\ctxlua{lpdf.collectedresources()}}
+
+%D Let's block these:
+
+\let\pdfcatalog \relax \newtoks\pdfcatalog
+\let\pdfinfo \relax \newtoks\pdfinfo
+\let\pdfnames \relax \newtoks\pdfnames
+\let\pdfpageresources\relax \newtoks\pdfpageresources
+\let\pdfpageattr \relax \newtoks\pdfpageattr
+\let\pdfpagesattr \relax \newtoks\pdfpagesattr
+
+%D An example of usage is:
+
+\appendtoks
+ \pdfbackendsetinfo{ConTeXt.Version}{\contextversion}%
+ \pdfbackendsetinfo{ConTeXt.Time} {\number\normalyear.\twodigits\normalmonth.\twodigits\normalday\space \twodigits\currenthour:\twodigits\currentminute}%
+ \pdfbackendsetinfo{ConTeXt.Jobname}{\jobname}%
+ \pdfbackendsetinfo{ConTeXt.Url} {www.pragma-ade.com}%
+\to \everylastbackendshipout
+
+%D Unfortunately this is still needed (also for \METAPOST\ to
+%D \PDF\ converter):
+
+% \def\doresetmapfilelist
+% {\global\let\doresetmapfilelist\relax
+% \pdfmapfile{original-empty.map}}
+%
+% \appendtoksonce \loadallfontmapfiles \to \pdfbackendeveryxform
+% \appendtoksonce \loadallfontmapfiles \to \pdfbackendeveryximage
+
+%D Transformations. Some day we will use primitives (once they're fixed).
+
+\def\dostartrotation#1% grouped
+ {\forcecolorhack
+ \pdfliteral{q \ctxlua{lpdf.rotationcm(#1)}}}
+
+\def\dostoprotation
+ {\pdfliteral{Q}}
+
+\def\dostartscaling#1#2% the test is needed because acrobat is bugged!
+ {\forcecolorhack
+ \pdfliteral{q \ifdim#1\points=\zeropoint.0001\else#1\fi\space 0 0
+ \ifdim#2\points=\zeropoint.0001\else#2\fi\space 0 0 cm}}
+
+\def\dostopscaling
+ {\pdfliteral{Q}}
+
+\def\dostartmirroring{\pdfliteral{-1 0 0 1 0 0 cm}}
+\def\dostopmirroring {\pdfliteral{-1 0 0 1 0 0 cm}}
+
+\def\dostartclipping#1#2#3% todo (still needed?)
+ {\PointsToBigPoints{#2}\width
+ \PointsToBigPoints{#3}\height
+ \grabMPclippath{#1}{1}\width\height{0 0 m \width\space 0 l \width \height l 0 \height l}%
+ \pdfliteral{q 0 w \MPclippath\space W n}}
+
+\def\dostopclipping
+ {\pdfliteral{Q n}}
+
+%D The following will move to the backend \LUA\ code:
+
+\appendtoks \ctxlua{backends.codeinjections.finalizepage ()}\to \everybackendshipout % is immediate
+\appendtoks \ctxlua{backends.codeinjections.finalizedocument()}\to \everylastbackendshipout % is immediate
+
+%D Temporary hack, will be removed or improved or default.
+
+\def\TransparencyHack{\ctxlua{backends.codeinjections.addtransparencygroup()}}
+
+%D \macros
+%D {dostartobject,dostopobject,doinsertobject}
+
+%D This will change:
+
+\newbox\objectbox
+
+\def\dostartobject#1#2#3#4#5%
+ {\bgroup
+ \setbox\objectbox\vbox\bgroup
+ \def\dodostopobject{\egroup\doregisterobject{#1}{#2}}}
+
+\def\dostopobject
+ {\dodostopobject
+ \egroup}
+
+\def\doregisterobject#1#2%
+ {\the\pdfbackendeveryxform
+ \finalizeobjectbox\objectbox
+ \immediate\pdfxform resources {\pdfbackendcurrentresources}\objectbox
+ \dosetobjectreference{#1}{#2}{\the\pdflastxform}}
+
+\def\doresetobjects
+ {}
+
+\def\doinsertobject#1#2%
+ {\begingroup
+ \doifobjectreferencefoundelse{#1}{#2}
+ {\dogetobjectreference{#1}{#2}\PDFobjectreference\pdfrefxform\PDFobjectreference}%
+ \donothing
+ \endgroup}
+
+\def\doPDFgetobjectpage#1#2#3%
+ {\dogetobjectreferencepage{#1}{#2}#3%
+ \ifx#3\empty\def#3{\realfolio}\fi}
+
+\def\doPDFgetobjectpagereference#1#2#3%
+ {\dogetobjectreferencepage{#1}{#2}#3%
+ \doPDFgetpagereference{\ifx#3\empty\realfolio\else#3\fi}#3}
+
+\let\lastpredefinedsymbol\empty % some day we can do more at the lua end
+
+\def\predefinesymbol[#1]%
+ {\begingroup
+ \xdef\lastpredefinedsymbol{#1}%
+ \settightobject{SYM}{#1}\hbox{\symbol[#1]}% to be checked ... maybe only fitting
+ \dogetobjectreference{SYM}{#1}\lastref
+ \ctxlua{backends.codeinjections.registersymbol("#1",\lastref)}%
+ \endgroup}
+
+\protect \endinput