Skip to content

Commit

Permalink
Start on PDF link support
Browse files Browse the repository at this point in the history
  • Loading branch information
josephwright committed Apr 9, 2019
1 parent bec852b commit 2f308c7
Show file tree
Hide file tree
Showing 12 changed files with 143 additions and 6 deletions.
84 changes: 78 additions & 6 deletions l3kernel/l3drivers-pdf.dtx
Expand Up @@ -189,6 +189,39 @@
%
% \subsubsection{Annotations}
%
% \begin{macro}{\driver_link_begin_goto:nn, \driver_link_begin_user:nn}
% \begin{macro}{\@@_link_begin:nnn}
% Links are all created using the same internals.
% \begin{macrocode}
\cs_new_protected:Npn \driver_link_begin_goto:nn #1#2
{ \@@_link_begin:nnn {#1} { goto~name } {#2} }
\cs_new_protected:Npn \driver_link_begin_user:nn #1#2
{ \@@_link_begin:nnn {#1} { user } {#2} }
\cs_new_protected:Npx \@@_link_begin:nnn #1#2#3
{
\cs_if_exist:NTF \tex_pdfextension:D
{ \tex_pdfextension:D startlink ~ }
{ \tex_pdfstartlink:D }
attr {#1}
\exp_not:N \tl_if_blank:nF {#2}
{ ~ #2 {#3} }
}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\driver_link_end:}
% Ending a link is easy.
% \begin{macrocode}
\cs_new_protected:Npx \driver_link_end:
{
\cs_if_exist:NTF \tex_pdfextension:D
{ \tex_pdfextension:D endlink }
{ \tex_pdfendlink:D }
}
% \end{macrocode}
% \end{macro}
%
% \subsubsection{Objects}
%
% \begin{variable}{\g_@@_pdf_object_prop}
Expand Down Expand Up @@ -310,8 +343,47 @@
%<*dvipdfmx|xdvipdfmx>
% \end{macrocode}
%
% \begin{macro}{\@@_pdf:n, \@@_pdf:x}
% A generic function for the driver PDF specials: used where we can.
% \begin{macrocode}
\cs_new_protected:Npx \@@_pdf:n #1
{ \@@_literal:n { pdf: #1 } }
\cs_generate_variant:Nn \@@_pdf:n { x }
% \end{macrocode}
% \end{macro}
%
% \subsubsection{Annotations}
%
% \begin{macro}{\driver_link_begin_goto:nn, \driver_link_begin_user:nn}
% \begin{macro}{\@@_link_begin:nnn}
% \begin{macrocode}
\cs_new_protected:Npn \driver_link_begin_goto:nn #1#2
{ \@@_pdf_startlink:nnn {#1} { /GoTo } {#2} }
\cs_new_protected:Npn \driver_link_begin_user:nn #1#2
{ \@@_pdf_startlink:nnn {#1} { } {#2} }
\cs_new_protected:Npn \@@_link_begin:nnn #1#2#3
{
\@@_pdf:n
{
bann
<<
/Type /Annot
/Subtype /Link
#1 ~ #2 ~ #3
>>
}
}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\driver_link_end:}
% \begin{macrocode}
\cs_new_protected:Npx \driver_link_end:
{ \@@_pdf:n { eann } }
% \end{macrocode}
% \end{macro}
%
% \subsubsection{Objects}
%
% \begin{variable}{\g_@@_pdf_object_int, \g_@@_pdf_object_prop}
Expand Down Expand Up @@ -362,17 +434,17 @@
{ \use:c { @@_pdf_object_write_ #1 :nn } {#2} {#3} }
\cs_new_protected:Npn \@@_pdf_object_write_array:nn #1#2
{
\@@_literal:x
\@@_pdf:x
{
pdf:obj ~ \driver_pdf_object_ref:n {#1} ~
obj ~ \driver_pdf_object_ref:n {#1} ~
[ ~ \exp_not:n {#2} ~ ]
}
}
\cs_new_protected:Npn \@@_pdf_object_write_dict:nn #1#2
{
\@@_literal:x
\@@_pdf:x
{
pdf:obj ~ \driver_pdf_object_ref:n {#1} ~
obj ~ \driver_pdf_object_ref:n {#1} ~
<< ~ \exp_not:n {#2} ~ >>
}
}
Expand All @@ -382,9 +454,9 @@
{ \@@_pdf_object_write_stream:nnnn { } {#1} #2 }
\cs_new_protected:Npn \@@_pdf_object_write_stream:nnnn #1#2#3#4
{
\@@_literal:x
\@@_pdf:x
{
pdf: #1 stream ~ \driver_pdf_object_ref:n {#2} ~
#1 stream ~ \driver_pdf_object_ref:n {#2} ~
( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >>

}
Expand Down
13 changes: 13 additions & 0 deletions l3kernel/l3drivers.dtx
Expand Up @@ -471,6 +471,19 @@
% are generated by \texttt{dvips}: this depends on being able to pass
% information through correctly.
%
% \subsection{PDF Annotations}
%
% \begin{function}[added = 2019-04-09]
% {\driver_link_begin_goto:nn, \driver_link_begin_user:nn, \driver_link_end:}
% \begin{syntax}
% \cs{driver_link_begin_user:nn} \Arg{} \Arg{}
% \meta{content}
% \cs{driver_link_end:}
% \end{syntax}
% Declares \meta{name} as a PDF object. The \texttt{type} should be one of
% |array| or |dict|, |fstream| or |stream|.
% \end{function}
%
% \subsection{PDF Objects}
%
% Objects are used to provide a range of data structures in a PDF. At the
Expand Down
4 changes: 4 additions & 0 deletions l3kernel/testfiles/m3expl001.luatex.tlg
Expand Up @@ -6462,6 +6462,10 @@ Defining \__driver_image_getbb_auxii:n on line ...
Defining \__driver_image_include_jpg:n on line ...
Defining \__driver_image_include_pdf:n on line ...
Defining \__driver_image_include_png:n on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_prop on line ...
Defining \driver_pdf_object_new:nn on line ...
Defining \driver_pdf_object_ref:n on line ...
Expand Down
6 changes: 6 additions & 0 deletions l3kernel/testfiles/m3expl001.ptex.tlg
Expand Up @@ -6504,6 +6504,12 @@ Defining \__driver_image_include_auxi:nn on line ...
Defining \__driver_image_include_auxii:nnn on line ...
Defining \__driver_image_include_auxii:xnn on line ...
Defining \__driver_image_include_auxiii:nnn on line ...
Defining \__driver_pdf:n on line ...
Defining \__driver_pdf:x on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_int on line ...
\g__driver_pdf_object_int=\count...
Defining \g__driver_pdf_object_prop on line ...
Expand Down
4 changes: 4 additions & 0 deletions l3kernel/testfiles/m3expl001.tlg
Expand Up @@ -6803,6 +6803,10 @@ Defining \__driver_image_getbb_auxii:n on line ...
Defining \__driver_image_include_jpg:n on line ...
Defining \__driver_image_include_pdf:n on line ...
Defining \__driver_image_include_png:n on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_prop on line ...
Defining \driver_pdf_object_new:nn on line ...
Defining \driver_pdf_object_ref:n on line ...
Expand Down
6 changes: 6 additions & 0 deletions l3kernel/testfiles/m3expl001.uptex.tlg
Expand Up @@ -6801,6 +6801,12 @@ Defining \__driver_image_include_auxi:nn on line ...
Defining \__driver_image_include_auxii:nnn on line ...
Defining \__driver_image_include_auxii:xnn on line ...
Defining \__driver_image_include_auxiii:nnn on line ...
Defining \__driver_pdf:n on line ...
Defining \__driver_pdf:x on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_int on line ...
\g__driver_pdf_object_int=\count...
Defining \g__driver_pdf_object_prop on line ...
Expand Down
6 changes: 6 additions & 0 deletions l3kernel/testfiles/m3expl001.xetex.tlg
Expand Up @@ -6480,6 +6480,12 @@ Defining \__driver_image_getbb_auxv:nNnn on line ...
Defining \__driver_image_getbb_auxvi:nNnn on line ...
Defining \__driver_image_getbb_pagebox:w on line ...
Defining \__driver_image_include_pdf:n on line ...
Defining \__driver_pdf:n on line ...
Defining \__driver_pdf:x on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_int on line ...
\g__driver_pdf_object_int=\count...
Defining \g__driver_pdf_object_prop on line ...
Expand Down
4 changes: 4 additions & 0 deletions l3kernel/testfiles/m3expl003.luatex.tlg
Expand Up @@ -6462,6 +6462,10 @@ Defining \__driver_image_getbb_auxii:n on line ...
Defining \__driver_image_include_jpg:n on line ...
Defining \__driver_image_include_pdf:n on line ...
Defining \__driver_image_include_png:n on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_prop on line ...
Defining \driver_pdf_object_new:nn on line ...
Defining \driver_pdf_object_ref:n on line ...
Expand Down
6 changes: 6 additions & 0 deletions l3kernel/testfiles/m3expl003.ptex.tlg
Expand Up @@ -6504,6 +6504,12 @@ Defining \__driver_image_include_auxi:nn on line ...
Defining \__driver_image_include_auxii:nnn on line ...
Defining \__driver_image_include_auxii:xnn on line ...
Defining \__driver_image_include_auxiii:nnn on line ...
Defining \__driver_pdf:n on line ...
Defining \__driver_pdf:x on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_int on line ...
\g__driver_pdf_object_int=\count...
Defining \g__driver_pdf_object_prop on line ...
Expand Down
4 changes: 4 additions & 0 deletions l3kernel/testfiles/m3expl003.tlg
Expand Up @@ -6803,6 +6803,10 @@ Defining \__driver_image_getbb_auxii:n on line ...
Defining \__driver_image_include_jpg:n on line ...
Defining \__driver_image_include_pdf:n on line ...
Defining \__driver_image_include_png:n on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_prop on line ...
Defining \driver_pdf_object_new:nn on line ...
Defining \driver_pdf_object_ref:n on line ...
Expand Down
6 changes: 6 additions & 0 deletions l3kernel/testfiles/m3expl003.uptex.tlg
Expand Up @@ -6801,6 +6801,12 @@ Defining \__driver_image_include_auxi:nn on line ...
Defining \__driver_image_include_auxii:nnn on line ...
Defining \__driver_image_include_auxii:xnn on line ...
Defining \__driver_image_include_auxiii:nnn on line ...
Defining \__driver_pdf:n on line ...
Defining \__driver_pdf:x on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_int on line ...
\g__driver_pdf_object_int=\count...
Defining \g__driver_pdf_object_prop on line ...
Expand Down
6 changes: 6 additions & 0 deletions l3kernel/testfiles/m3expl003.xetex.tlg
Expand Up @@ -6480,6 +6480,12 @@ Defining \__driver_image_getbb_auxv:nNnn on line ...
Defining \__driver_image_getbb_auxvi:nNnn on line ...
Defining \__driver_image_getbb_pagebox:w on line ...
Defining \__driver_image_include_pdf:n on line ...
Defining \__driver_pdf:n on line ...
Defining \__driver_pdf:x on line ...
Defining \driver_link_begin_goto:nn on line ...
Defining \driver_link_begin_user:nn on line ...
Defining \__driver_link_begin:nnn on line ...
Defining \driver_link_end: on line ...
Defining \g__driver_pdf_object_int on line ...
\g__driver_pdf_object_int=\count...
Defining \g__driver_pdf_object_prop on line ...
Expand Down

0 comments on commit 2f308c7

Please sign in to comment.