%% %% This is file `l3dvips.def', %% generated with the docstrip utility. %% %% The original source files were: %% %% l3drivers.dtx (with options: `package,dvips') %% l3drivers-basics.dtx (with options: `package,dvips') %% l3drivers-color.dtx (with options: `package,dvips') %% l3drivers-box.dtx (with options: `package,dvips') %% l3drivers-draw.dtx (with options: `package,dvips') %% l3drivers-graphics.dtx (with options: `package,dvips') %% l3drivers-pdf.dtx (with options: `package,dvips') %% %% Copyright (C) 1990-2019 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: %% %% https://www.latex-project.org/lppl.txt %% %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% %% File: l3drivers.dtx %% File: l3drivers-basics.dtx \ProvidesExplFile {l3dvips.def}{2019-04-06}{} {L3 Experimental driver: dvips} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } \box_new:N \l__driver_internal_box \cs_new_protected:Npn \__driver_literal_postscript:n #1 { \__driver_literal:n { ps:: #1 } } \cs_generate_variant:Nn \__driver_literal_postscript:n { x } \cs_new_protected:Npn \__driver_postscript:n #1 { \__driver_literal:n { ps: SDict ~ begin ~ #1 ~ end } } \cs_generate_variant:Nn \__driver_postscript:n { x } \cs_new_protected:Npx \__driver_postscript_header:n #1 { \cs_if_exist:NTF \AtBeginDvi { \exp_not:N \AtBeginDvi } { \use:n } { \__driver_literal:n { ! #1 } } } \cs_new_protected:Npn \__driver_align_currentpoint_begin: { \__driver_literal:n { ps::[begin] } \__driver_literal_postscript:n { currentpoint } \__driver_literal_postscript:n { currentpoint~translate } } \cs_new_protected:Npn \__driver_align_currentpoint_end: { \__driver_literal_postscript:n { neg~exch~neg~exch~translate } \__driver_literal:n { ps::[end] } } \cs_new_protected:Npn \__driver_scope_begin: { \__driver_literal:n { ps:gsave } } \cs_new_protected:Npn \__driver_scope_end: { \__driver_literal:n { ps:grestore } } %% File: l3drivers-color.dtx \cs_new_protected:Npn \driver_color_pickup:N #1 { } \AtBeginDocument { \@ifpackageloaded { color } { \cs_set_protected:Npn \driver_color_pickup:N #1 { \exp_args:NV \tl_if_head_is_space:nTF \current@color { \tl_set:Nx #1 { spot ~ \exp_after:wN \use:n \current@color \c_space_tl 1 } } { \exp_last_unbraced:Nx \__driver_color_pickup:w { \current@color } \q_stop #1 } } \cs_new_protected:Npn \__driver_color_pickup:w #1 ~ #2 \q_stop #3 { \tl_set:Nn #3 { #1 ~ #2 } } } { } } \cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4 { \__driver_color_select:x { cmyk~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ \fp_eval:n {#4} } } \cs_new_protected:Npn \driver_color_gray:n #1 { \__driver_color_select:x { gray~ \fp_eval:n {#1} } } \cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3 { \__driver_color_select:x { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} } } \cs_new_protected:Npn \driver_color_spot:nn #1#2 { \__driver_color_select:n { #1 } } \cs_new_protected:Npn \__driver_color_select:n #1 { \__driver_literal:n { color~push~ #1 } \__driver_postscript:n { /driver.fc~{ }~def } \group_insert_after:N \__driver_color_reset: } \cs_generate_variant:Nn \__driver_color_select:n { x } \cs_new_protected:Npn \__driver_color_reset: { \__driver_literal:n { color~pop } } %% File: l3drivers-box.dtx \cs_new_protected:Npn \driver_box_use_clip:N #1 { \__driver_scope_begin: \__driver_align_currentpoint_begin: \__driver_literal_postscript:n { matrix~currentmatrix } \__driver_literal_postscript:n { Resolution~72~div~VResolution~72~div~scale } \__driver_literal_postscript:n { DVImag~dup~scale } \__driver_literal_postscript:x { 0 ~ \dim_to_decimal_in_bp:n { \box_dp:N #1 } ~ \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~ \dim_to_decimal_in_bp:n { -\box_ht:N #1 - \box_dp:N #1 } ~ rectclip } \__driver_literal_postscript:n { setmatrix } \__driver_align_currentpoint_end: \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: \skip_horizontal:n { \box_wd:N #1 } } \cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2 { \exp_args:NNf \__driver_box_use_rotate:Nn #1 { \fp_eval:n {#2} } } \cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2 { \__driver_scope_begin: \__driver_align_currentpoint_begin: \__driver_literal_postscript:x { \fp_compare:nNnTF {#2} = \c_zero_fp { 0 } { \fp_eval:n { round ( -(#2) , 5 ) } } ~ rotate } \__driver_align_currentpoint_end: \box_use:N #1 \__driver_scope_end: } \cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3 { \__driver_scope_begin: \__driver_align_currentpoint_begin: \__driver_literal_postscript:x { \fp_eval:n { round ( #2 , 5 ) } ~ \fp_eval:n { round ( #3 , 5 ) } ~ scale } \__driver_align_currentpoint_end: \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } %% File: l3drivers-draw.dtx \cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_postscript:n \cs_generate_variant:Nn \__driver_draw_literal:n { x } \cs_new_protected:Npn \driver_draw_begin: { \__driver_literal:n { ps::[begin] } \__driver_draw_literal:n { @beginspecial } \__driver_darw_literal:n { SDict ~ begin ~ /driver.fc ~ { } ~ def ~ end } } \cs_new_protected:Npn \driver_draw_end: { \__driver_draw_literal:n { @endspecial } \__driver_literal:n { ps::[end] } } \cs_new_protected:Npn \driver_draw_scope_begin: { \__driver_draw_literal:n { save } } \cs_new_protected:Npn \driver_draw_scope_end: { \__driver_draw_literal:n { restore } } \cs_new_protected:Npn \driver_draw_moveto:nn #1#2 { \__driver_draw_literal:x { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ moveto } } \cs_new_protected:Npn \driver_draw_lineto:nn #1#2 { \__driver_draw_literal:x { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ lineto } } \cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4 { \__driver_draw_literal:x { \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath } } \cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6 { \__driver_draw_literal:x { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~ curveto } } \cs_new_protected:Npn \driver_draw_evenodd_rule: { \bool_gset_true:N \g__driver_draw_eor_bool } \cs_new_protected:Npn \driver_draw_nonzero_rule: { \bool_gset_false:N \g__driver_draw_eor_bool } \bool_new:N \g__driver_draw_eor_bool \cs_new_protected:Npn \driver_draw_closepath: { \__driver_draw_literal:n { closepath } } \cs_new_protected:Npn \driver_draw_stroke: { \__driver_draw_literal:n { stroke } \bool_if:NT \g__driver_draw_clip_bool { \__driver_draw_literal:x { \bool_if:NT \g__driver_draw_eor_bool { eo } clip } } \__driver_draw_literal:n { newpath } \bool_gset_false:N \g__driver_draw_clip_bool } \cs_new_protected:Npn \driver_draw_closestroke: { \driver_draw_closepath: \driver_draw_stroke: } \cs_new_protected:Npn \driver_draw_fill: { \__driver_draw_literal:n { gsave } \__driver_draw_literal:n { driver.fc } \__driver_draw_literal:x { \bool_if:NT \g__driver_draw_eor_bool { eo } fill } \__driver_draw_literal:n { grestore } \bool_if:NT \g__driver_draw_clip_bool { \__driver_draw_literal:x { \bool_if:NT \g__driver_draw_eor_bool { eo } clip } } \__driver_draw_literal:n { newpath } \bool_gset_false:N \g__driver_draw_clip_bool } \cs_new_protected:Npn \driver_draw_fillstroke: { \__driver_draw_literal:n { gsave } \__driver_draw_literal:n { driver.fc } \__driver_draw_literal:x { \bool_if:NT \g__driver_draw_eor_bool { eo } fill } \__driver_draw_literal:n { grestore } \__driver_draw_literal:n { stroke } \bool_if:NT \g__driver_draw_clip_bool { \__driver_draw_literal:x { \bool_if:NT \g__driver_draw_eor_bool { eo } clip } } \__driver_draw_literal:n { newpath } \bool_gset_false:N \g__driver_draw_clip_bool } \cs_new_protected:Npn \driver_draw_clip: { \bool_gset_true:N \g__driver_draw_clip_bool } \bool_new:N \g__driver_draw_clip_bool \cs_new_protected:Npn \driver_draw_discardpath: { \bool_if:NT \g__driver_draw_clip_bool { \__driver_draw_literal:x { \bool_if:NT \g__driver_draw_eor_bool { eo } clip } } \__driver_draw_literal:n { newpath } \bool_gset_false:N \g__driver_draw_clip_bool } \cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2 { \__driver_draw_literal:x { [ \exp_args:Nf \use:n { \clist_map_function:nN {#1} \__driver_draw_dash:n } ] ~ \dim_to_decimal_in_bp:n {#2} ~ setdash } } \cs_new:Npn \__driver_draw_dash:n #1 { ~ \dim_to_decimal_in_bp:n {#1} } \cs_new_protected:Npn \driver_draw_linewidth:n #1 { \__driver_draw_literal:x { \dim_to_decimal_in_bp:n {#1} ~ setlinewidth } } \cs_new_protected:Npn \driver_draw_miterlimit:n #1 { \__driver_draw_literal:x { \fp_eval:n {#1} ~ setmiterlimit } } \cs_new_protected:Npn \driver_draw_cap_butt: { \__driver_draw_literal:n { 0 ~ setlinecap } } \cs_new_protected:Npn \driver_draw_cap_round: { \__driver_draw_literal:n { 1 ~ setlinecap } } \cs_new_protected:Npn \driver_draw_cap_rectangle: { \__driver_draw_literal:n { 2 ~ setlinecap } } \cs_new_protected:Npn \driver_draw_join_miter: { \__driver_draw_literal:n { 0 ~ setlinejoin } } \cs_new_protected:Npn \driver_draw_join_round: { \__driver_draw_literal:n { 1 ~ setlinejoin } } \cs_new_protected:Npn \driver_draw_join_bevel: { \__driver_draw_literal:n { 2 ~ setlinejoin } } \cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4 { \__driver_draw_color_fill:x { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ \fp_eval:n {#4} ~ setcmykcolor } } \cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4 { \__driver_draw_color_stroke:x { cmyk ~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ \fp_eval:n {#4} } } \cs_new_protected:Npn \driver_draw_color_fill_gray:n #1 { \__driver_draw_color_fill:x { \fp_eval:n {#1} ~ setgray } } \cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1 { \__driver_draw_color_stroke:x { gray ~ \fp_eval:n {#1} } } \cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3 { \__driver_draw_color_fill:x { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ setrgbcolor } } \cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3 { \__driver_draw_color_stroke:x { rgb ~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} } } \cs_new_protected:Npn \__driver_draw_color_fill:n #1 { \__driver_postscript:n { SDict ~ begin ~ /driver.fc ~ { #1 } ~ def ~ end } } \cs_generate_variant:Nn \__driver_draw_color_fill:n { x } \cs_new_protected:Npn \__driver_draw_color_stroke:n #1 { \__driver_literal:n { color~push~#1 } \group_insert_after:N \__driver_color_reset: } \cs_generate_variant:Nn \__driver_draw_color_stroke:n { x } \cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4 { \__driver_draw_literal:n { [ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ \fp_eval:n {#4} ~ 0 ~ 0 ] ~ concat } } \cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5 { \__driver_draw_literal:n { @endspecial } \__driver_draw_literal:n { [end] } \__driver_draw_literal:n { [begin] } \__driver_draw_literal:n { save } \__driver_draw_literal:n { currentpoint } \__driver_draw_literal:n { currentpoint~translate } \driver_draw_cm:nnnn { 1 } { 0 } { 0 } { -1 } \driver_draw_cm:nnnn {#2} {#3} {#4} {#5} \driver_draw_cm:nnnn { 1 } { 0 } { 0 } { -1 } \__driver_draw_literal:n { neg~exch~neg~exch~translate } \__driver_draw_literal:n { [end] } \hbox_overlap_right:n { \box_use:N #1 } \__driver_draw_literal:n { [begin] } \__driver_draw_literal:n { restore } \__driver_draw_literal:n { [end] } \__driver_draw_literal:n { [begin] } \__driver_draw_literal:n { @beginspecial } } %% File: l3drivers-graphics.dtx \AtBeginDocument { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n } \cs_new_protected:Npn \driver_graphics_include_eps:n #1 { \__driver_literal:x { PSfile = #1 \c_space_tl llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim } } %% File: l3drivers-pdf.dtx \cs_new_protected:Npn \__driver_pdfmark:n #1 { \__driver_postscript:n { mark #1 ~ pdfmark } } \cs_generate_variant:Nn \__driver_pdfmark:n { x } \cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2 { \__driver_pdfmark:n { { Catalog } << /#1 ~ #2 >> /PUT } } \cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2 { \__driver_pdfmark:n { /#1 ~ #2 /DOCINFO } } \int_new:N \g__driver_pdf_object_int \prop_new:N \g__driver_pdf_object_prop \cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 { \int_gincr:N \g__driver_pdf_object_int \int_const:cn { c__driver_pdf_object_ \tl_to_str:n {#1} _int } { \g__driver_pdf_object_int } \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2} } \cs_new:Npn \driver_pdf_object_ref:n #1 { { driver.obj \int_use:c { c__driver_pdf_object_ \tl_to_str:n {#1} _int } } } \cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 { \__driver_pdfmark:x { /_objdef ~ \driver_pdf_object_ref:n {#1} /type \str_case_e:nn { \prop_item:Nn \g__driver_pdf_object_prop {#1} } { { array } { /array } { dict } { /dict } { fstream } { /stream } { stream } { /stream } } /OBJ } \use:c { __driver_pdf_object_write_ \prop_item:Nn \g__driver_pdf_object_prop {#1} :nn } {#1} {#2} } \cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2 { \__driver_pdfmark:x { \driver_pdf_object_ref:n {#1} [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL } } \cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2 { \__driver_pdfmark:x { \driver_pdf_object_ref:n {#1} << \exp_not:n {#2} >> /PUT } } \cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2 { \exp_args:Nx \__driver_pdf_object_write_stream:nnn { \driver_pdf_object_ref:n {#1} } #2 } \cs_new_protected:Npn \__driver_pdf_object_write_stream:nnn #1#2#3 { \__driver_postscript:n { [nobreak] mark ~ #1 ~ ( #3 ) /PUT ~ pdfmark ~ mark ~ #1 ~ << #2 >> /PUT ~ pdfmark } } \__driver_postscript_header:n { true ~ setglobal ~ /driver.globaldict ~ 4 ~ dict ~ def ~ false ~ setglobal } \__driver_postscript_header:n { /driver.cvs { 65534 ~ string ~ cvs } def /driver.dvi.pt { 72.27 ~ mul ~ Resolution ~ div } def /driver.pt.dvi { 72.27 ~ div ~ Resolution ~ mul } def /driver.rect.ht { dup ~ 1 ~ get ~ neg ~ exch ~ 3 ~ get ~ add } def } \__driver_postscript_header:n { /driver.linkmargin { 1 ~ driver.pt.dvi } def /driver.linkdp.pad { 0 } def /driver.linkht.pad { 0 } def } \__driver_postscript_header:n { /driver.rect { /Rect [ driver.llx ~ driver.lly ~ driver.urx ~ driver.ury ] } def /driver.save.ll { currentpoint /driver.lly ~ exch ~ def /driver.llx ~ exch ~ def } def /driver.save.ur { currentpoint /driver.ury ~ exch ~ def /driver.urx ~ exch ~ def } def /driver.save.linkll { currentpoint ~ driver.linkmargin ~ add ~ driver.linkdp.pad ~ add /driver.lly ~ exch ~ def ~ driver.linkmargin ~ sub /driver.llx ~ exch ~ def } def /driver.save.linkur { currentpoint ~ driver.linkmargin ~ sub ~ driver.linkht.pad ~ sub /driver.ury ~ exch ~ def ~ driver.linkmargin ~ add /driver.urx ~ exch ~ def } def } \__driver_postscript_header:n { /driver.dest.anchor { currentpoint ~ exch ~ driver.dvi.pt ~ 72 ~ add ~ /driver.dest.x ~ exch ~ def ~ driver.dvi.pt ~ vsize ~ 72 ~ sub ~ exch ~ sub ~ /driver.dest.y ~ exch ~ def } def /driver.dest.point { driver.dest.x ~ driver.dest.y } def /driver.dest2device { /driver.dest.y ~ exch ~ def /driver.dest.x ~ exch ~ def ~ matrix ~ currentmatrix ~ matrix ~ defaultmatrix ~ matrix ~ invertmatrix ~ matrix ~ concatmatrix ~ cvx ~ exec /driver.dev.y ~ exch ~ def /driver.dev.x ~ exch ~ def /driver.tmpd ~ exch ~ def /driver.tmpc ~ exch ~ def /driver.tmpb ~ exch ~ def /driver.tmpa ~ exch ~ def ~ driver.dest.x ~ driver.tmpa ~ mul ~ driver.dest.y ~ driver.tmpc ~ mul ~ add ~ driver.dev.x ~ add ~ driver.dest.x ~ driver.tmpb ~ mul ~ driver.dest.y ~ driver.tmpd ~ mul ~ add ~ driver.dev.y ~ add } def } \__driver_postscript_header:n { /driver.bordertracking ~ false ~ def /driver.bordertracking.begin { SDict ~ /driver.bordertracking ~ true ~ put ~ SDict ~ /driver.leftboundary ~ undef ~ SDict ~ /driver.rightboundary ~ undef ~ /a ~ where { /a { currentpoint ~ pop ~ SDict /driver.rightboundary ~ known ~ dup { SDict /driver.rightboundary ~ get ~ 2 ~ index ~ lt { not } if } if { pop } { SDict ~ exch /driver.rightboundary ~ exch ~ put } ifelse ~ moveto ~ currentpoint ~ pop ~ SDict /driver.leftboundary ~ known ~ dup { SDict /driver.leftboundary ~ get ~ 2 ~ index ~ gt { not } if } if { pop } { SDict ~ exch /driver.leftboundary ~ exch ~ put } ifelse } put } if } def /driver.bordertracking.end { /a ~ where { /a { moveto } put } if /x ~ where { /x { 0 ~ exch ~ rmoveto } put } if ~ SDict /driver.leftboundary ~ known { driver.outerbox ~ 0 ~ driver.leftboundary ~ put } if ~ SDict /driver.rightboundary ~ known { driver.outerbox ~ 2 ~ driver.rightboundary ~ put } if ~ SDict /driver.bordertracking ~ false ~ put } def /driver.bordertracking.endpage { driver.bordertracking { driver.bordertracking.end ~ true ~ setglobal ~ driver.globaldict /driver.brokenlink.rect [ driver.outerbox ~ aload ~ pop ] put ~ driver.globaldict /driver.brokenlink.skip ~ driver.baselineskip ~ put ~ driver.globaldict /driver.brokenlink.dict ~ driver.link.dict ~ driver.cvs ~ put ~ false ~ setglobal ~ mark ~ driver.link.dict ~ cvx ~ exec ~ /Rect [ driver.llx ~ driver.lly ~ driver.outerbox ~ 2 ~ get ~ driver.linkmargin ~ add ~ currentpoint ~ exch ~ pop ~ driver.outerbox ~ driver.rect.ht ~ sub ~ driver.linkmargin ~ sub ] /ANN ~ driver.pdfmark } if } def /driver.bordertracking.continue { /driver.link.dict ~ driver.globaldict /driver.brokenlink.dict ~ get ~ def /driver.outerbox ~ driver.globaldict /driver.brokenlink.rect ~ get ~ def /driver.baselineskip ~ driver.globaldict /driver.brokenlink.skip ~ get ~ def ~ driver.globaldict ~ dup ~ dup /driver.brokenlink.dict ~ undef /driver.brokenlink.skip ~ undef /driver.brokenlink.rect ~ undef ~ currentpoint /driver.originy ~ exch ~ def /driver.originx ~ exch ~ def /a ~ where { /a { moveto ~ SDict ~ begin ~ currentpoint ~ driver.originy ~ ne ~ exch ~ driver.originx ~ ne ~ or { driver.save.linkll /driver.lly ~ driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~ driver.bordertracking.begin } if ~ end } put } if /x ~ where { /x { 0 ~ exch ~ rmoveto ~ SDict~ begin ~ currentpoint ~ driver.originy ~ ne ~ exch ~ driver.originx ~ ne ~ or { driver.save.linkll /driver.lly ~ driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~ driver.bordertracking.begin } if ~ end } put } if } def } \__driver_postscript_header:n { /driver.breaklink { pop ~ counttomark ~ 2 ~ mod ~ 0 ~ eq { counttomark /driver.count ~ exch ~ def { driver.count ~ 0 ~ eq { exit } if ~ counttomark ~ 2 ~ roll ~ 1 ~ index ~ /Rect ~ eq { dup ~ 4 ~ array ~ copy ~ dup ~ dup ~ 1 ~ get ~ driver.outerbox ~ driver.rect.ht ~ driver.linkmargin ~ 2 ~ mul ~ add ~ sub ~ 3 ~ exch ~ put ~ dup ~ driver.outerbox ~ 2 ~ get ~ driver.linkmargin ~ add ~ 2 ~ exch ~ put ~ dup ~ dup ~ 3 ~ get ~ driver.outerbox ~ driver.rect.ht ~ driver.linkmargin ~ 2 ~ mul ~ add ~ add ~ 1 ~ exch ~ put /driver.currentrect ~ exch ~ def ~ driver.breaklink.write { driver.currentrect ~ dup ~ driver.outerbox ~ 0 ~ get ~ driver.linkmargin ~ sub ~ 0 ~ exch ~ put ~ dup ~ driver.outerbox ~ 2 ~ get ~ driver.linkmargin ~ add ~ 2 ~ exch ~ put ~ dup ~ dup ~ 1 ~ get ~ driver.baselineskip ~ add ~ 1 ~ exch ~ put ~ dup ~ dup ~ 3 ~ get ~ driver.baselineskip ~ add ~ 3 ~ exch ~ put ~ /driver.currentrect ~ exch ~ def ~ driver.breaklink.write } 1 ~ index ~ 3 ~ get ~ driver.linkmargin ~ 2 ~ mul ~ add ~ driver.outerbox ~ driver.rect.ht ~ add ~ 2 ~ index ~ 1 ~ get ~ sub ~ driver.baselineskip ~ div ~ round ~ cvi ~ 1 ~ sub ~ exch ~ repeat ~ driver.currentrect ~ dup ~ driver.outerbox ~ 0 ~ get ~ driver.linkmargin ~ sub ~ 0 ~ exch ~ put ~ dup ~ dup ~ 1 ~ get ~ driver.baselineskip ~ add ~ 1 ~ exch ~ put ~ dup ~ dup ~ 3 ~ get ~ driver.baselineskip ~ add ~ 3 ~ exch ~ put ~ dup ~ 2 ~ index ~ 2 ~ get ~ 2 ~ exch ~ put /driver.currentrect ~ exch ~ def ~ driver.breaklink.write ~ SDict /driver.pdfmark.good ~ false ~ put ~ exit } { driver.count ~ 2 ~ sub /driver.count ~ exch ~ def } ifelse } loop } if /ANN } def /driver.breaklink.write { counttomark ~ 1 ~ sub ~ index /_objdef ~ eq { counttomark ~ -2 ~ roll ~ dup ~ wcheck ~ { readonly ~ counttomark ~ 2 ~ roll } { pop ~ pop } ifelse } if ~ counttomark ~ 1 ~ add ~ copy ~ pop ~ driver.currentrect /ANN ~ pdfmark } def } \__driver_postscript_header:n { /driver.pdfmark { SDict /driver.pdfmark.good ~ true ~ put ~ dup /ANN ~ eq { driver.pdfmark.store ~ driver.pdfmark.dict ~ begin ~ Subtype /Link ~ eq ~ currentdict /Rect ~ known ~ and ~ SDict /driver.outerbox ~ known ~ and ~ SDict /driver.baselineskip ~ known ~ and ~ { Rect ~ 3 ~ get ~ driver.linkmargin ~ 2 ~ mul ~ add ~ driver.outerbox ~ driver.rect.ht ~ add ~ Rect ~ 1 ~ get ~ sub ~ driver.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt { driver.breaklink } if } if ~ end ~ SDict /driver.outerbox ~ undef ~ SDict /driver.baselineskip ~ undef ~ currentdict /driver.pdfmark.dict ~ undef ~ } if ~ driver.pdfmark.good { pdfmark } { cleartomark } ifelse } def /driver.pdfmark.store { /driver.pdfmark.dict ~ 65534 ~ dict ~ def ~ counttomark ~ 1 ~ add ~ copy ~ pop { dup ~ mark ~ eq { pop ~ exit } { driver.pdfmark.dict ~ begin ~ def ~ end } ifelse } loop } def } \box_new:N \l__driver_pdf_content_box \box_new:N \l__driver_pdf_model_box \int_new:N \g__driver_pdf_annotation_int \cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4 { \__driver_pdf_annotation:nnnn {#1} {#2} {#3} {#4} \int_gincr:N \g__driver_pdf_object_int \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int \__driver_pdfmark:x { /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int } driver.rect ~ #4 ~ /ANN } } \cs_new_protected:Npn \__driver_pdf_annotation:nnnn #1#2#3#4 { \box_move_down:nn {#3} { \hbox:n { \__driver_postscript:n { driver.save.ll } } } \hbox:n {#4} \box_move_up:nn {#2} { \hbox:n { \tex_kern:D \dim_eval:n {#1} \scan_stop: \__driver_postscript:n { driver.save.ur } } } \int_gincr:N \g__driver_pdf_object_int \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int \__driver_pdfmark:x { /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int } driver.rect /ANN } } \cs_new:Npn \driver_pdf_annotation_last: { { driver.obj \int_use:N \g__driver_pdf_annotation_int } } \int_new:N \g__driver_pdf_link_int \tl_new:N \g__driver_pdf_link_dict_tl \int_new:N \g__driver_pdf_link_sf_int \bool_new:N \g__driver_pdf_link_math_bool \bool_new:N \g__driver_pdf_link_bool \tl_new:N \l__driver_breaklink_pdfmark_tl \tl_set:Nn \l__driver_breaklink_pdfmark_tl { pdfmark } \cs_new_protected:Npn \__driver_breaklink_postscript:n #1 { } \cs_new_eq:NN \__driver_breaklink_usebox:N \box_use:N \cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2 { \__driver_pdf_link_begin:nw { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } } \cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2 { \__driver_pdf_link_begin:nw {#1#2} } \cs_new_protected:Npn \__driver_pdf_link_begin:nw #1 { \bool_if:NF \g__driver_pdf_link_bool { \__driver_pdf_link_begin_aux:nw {#1} } } \cs_new_protected:Npn \__driver_pdf_link_begin_aux:nw #1 { \bool_gset_true:N \g__driver_pdf_link_bool \__driver_postscript:n { /driver.link.dict ( #1 ) def } \tl_gset:Nn \g__driver_pdf_link_dict_tl {#1} \__driver_pdf_link_sf_save: \mode_if_math:TF { \bool_gset_true:N \g__driver_pdf_link_math_bool } { \bool_gset_false:N \g__driver_pdf_link_math_bool } \hbox_set:Nw \l__driver_pdf_content_box \__driver_pdf_link_sf_restore: \bool_if:NT \g__driver_pdf_link_math_bool { \c_math_toggle_token } } \cs_new_protected:Npn \driver_pdf_link_end: { \bool_if:NT \g__driver_pdf_link_bool { \__driver_pdf_link_end: } } \cs_new_protected:Npn \__driver_pdf_link_end: { \bool_if:NT \g__driver_pdf_link_math_bool { \c_math_toggle_token } \__driver_pdf_link_sf_save: \hbox_set_end: \__driver_pdf_link_minima: \hbox_set:Nn \l__driver_pdf_model_box { Gg } \exp_args:Nx \__driver_driver_link_outerbox:n { \int_if_odd:nTF { \value { page } } { \oddsidemargin } { \evensidemargin } } \box_move_down:nn { \box_dp:N \l__driver_pdf_content_box } { \hbox:n { \__driver_postscript:n { driver.save.linkll } } } \__driver_breaklink_postscript:n { driver.bordertracking.begin } \__driver_breaklink_usebox:N \l__driver_pdf_content_box \__driver_breaklink_postscript:n { driver.bordertracking.end } \box_move_up:nn { \box_ht:N \l__driver_pdf_content_box } { \hbox:n { \__driver_postscript:n { driver.save.linkur } } } \int_gincr:N \g__driver_pdf_object_int \int_gset_eq:NN \g__driver_pdf_link_int \g__driver_pdf_object_int \__driver_postscript:x { mark /_objdef { driver.obj \int_use:N \g__driver_pdf_link_int } \g__driver_pdf_link_dict_tl \c_space_tl driver.rect /ANN ~ \l__driver_breaklink_pdfmark_tl } \__driver_pdf_link_sf_restore: \bool_gset_false:N \g__driver_pdf_link_bool } \cs_new_protected:Npn \__driver_pdf_link_minima: { \hbox_set:Nn \l__driver_pdf_model_box { Gg } \__driver_postscript:x { /driver.linkdp.pad ~ \dim_to_decimal:n { \dim_max:nn { \box_dp:N \l__driver_pdf_model_box - \box_dp:N \l__driver_pdf_content_box } { 0pt } } ~ driver.pt.dvi ~ def /driver.linkht.pad ~ \dim_to_decimal:n { \dim_max:nn { \box_ht:N \l__driver_pdf_model_box - \box_ht:N \l__driver_pdf_content_box } { 0pt } } ~ driver.pt.dvi ~ def } } \cs_new_protected:Npn \__driver_driver_link_outerbox:n #1 { \__driver_postscript:x { /driver.outerbox [ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n { -\box_dp:N \l__driver_pdf_model_box } ~ \dim_to_decimal:n { #1 + \textwidth } ~ \dim_to_decimal:n { \box_ht:N \l__driver_pdf_model_box } ] [ exch { driver.pt.dvi } forall ] def /driver.baselineskip ~ \dim_to_decimal:n { \tex_baselineskip:D } ~ dup ~ 0 ~ gt { driver.pt.dvi ~ def } { pop ~ pop } ifelse } } \cs_new_protected:Npn \__driver_pdf_link_sf_save: { \int_gset:Nn \g__driver_pdf_link_sf_int { \mode_if_horizontal:TF { \tex_spacefactor:D } { 0 } } } \cs_new_protected:Npn \__driver_pdf_link_sf_restore: { \mode_if_horizontal:T { \int_compare:nNnT \g__driver_pdf_link_sf_int > { 0 } { \int_set_eq:NN \tex_spacefactor:D \g__driver_pdf_link_sf_int } } } \use_none:n { \cs_if_exist:NT \@makecol@hook { \tl_put_right:Nn \@makecol@hook { \box_if_empty:NF \@cclv { \vbox_set:Nn \@cclv { \__driver_postscript:n { driver.globaldict /driver.brokenlink.rect ~ known { driver.bordertracking.continue } if } \vbox_unpack_drop:N \@cclv \__driver_postscript:n { driver.bordertracking.endpage } } } } \tl_set:Nn \l__driver_breaklink_pdfmark_tl { driver.pdfmark } \cs_set_eq:NN \__driver_breaklink_postscript:n \__driver_postscript:n \cs_set_eq:NN \__driver_breaklink_usebox:N \hbox_unpack:N } } \cs_new:Npn \driver_pdf_link_last: { { driver.obj \int_use:N \g__driver_pdf_link_int } } \cs_new_protected:Npn \driver_pdf_link_margin:n #1 { \__driver_postscript:x { /driver.linkmargin { \dim_to_decimal:n {#1} ~ driver.pt.dvi } def } } \cs_new_protected:Npn \driver_pdf_destination:nn #1#2 { \__driver_postscript:n { driver.dest.anchor } \__driver_pdfmark:x { /View [ \str_case:nnF {#2} { { xyz } { /XYZ ~ driver.dest.point ~ null } { fit } { /Fit } { fitb } { /FitB } { fitbh } { /FitBH ~ driver.dest.y } { fitbv } { /FitBV ~ driver.dest.x } { fith } { /FitH ~ driver.dest.y } { fitv } { /FitV ~ driver.dest.x } } { /XYZ ~ driver.dest.point ~ \fp_eval:n { (#2) / 100 } } ] /Dest ( \exp_not:n {#1} ) cvn /DEST } } \cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2 { \group_begin: \hbox_set:Nn \l__driver_internal_box {#2} \box_move_down:nn { \box_dp:N \l__driver_internal_box } { \hbox:n { \__driver_postscript:n { driver.save.ll } } } \box_use:N \l__driver_internal_box \box_move_up:nn { \box_ht:N \l__driver_internal_box } { \hbox:n { \__driver_postscript:n { driver.save.ur } } } \__driver_pdfmark:n { /View [ /FitR ~ driver.llx ~ driver.lly ~ driver.dest2device ~ driver.urx ~ driver.ury ~ driver.dest2device ] /Dest ( #1 ) cvn /DEST } \group_end: } \cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { } \cs_new_protected:Npn \driver_pdf_compress_objects:n #1 { } \cs_new_protected:Npn \driver_pdf_version_major_gset:n #1 { } \cs_new_protected:Npn \driver_pdf_version_minor_gset:n #1 { } \cs_new:Npn \driver_pdf_version_major: { -1 } \cs_new:Npn \driver_pdf_version_minor: { -1 } %% %% %% End of file `l3dvips.def'.