texlive[52928] Master/texmf-dist: l3backend (26nov19)

commits+karl at tug.org commits+karl at tug.org
Tue Nov 26 22:35:56 CET 2019


Revision: 52928
          http://tug.org/svn/texlive?view=revision&revision=52928
Author:   karl
Date:     2019-11-26 22:35:55 +0100 (Tue, 26 Nov 2019)
Log Message:
-----------
l3backend (26nov19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3backend/README.md
    trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf
    trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins
    trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def

Added Paths:
-----------
    trunk/Master/texmf-dist/dvips/l3backend/
    trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro
    trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md	2019-11-26 21:35:55 UTC (rev 52928)
@@ -6,26 +6,27 @@
 
 ## [Unreleased]
 
+## [2019-11-25]
+
+### Changed
+- Move dvips header material to `.pro` file
+
 ## [2019-10-11]
 
 ### Changed
-
 - Improved functionality in generic mode
 
 ## [2019-09-05]
 
 ### Added
-
 - Support for EPS and PDF files with `dvisvgm` backend
 
 ### Fixed
-
 - Some primitive use in the `dvips` backend
 
 ## [2019-08-25]
 
 ### Fixed
-
 - Setting for PDF version in `dvipdfmx` route
 - Support for PDF objects with XeTeX
 
@@ -32,16 +33,15 @@
 ## [2019-07-01]
 
 ### Added
-
 - Driver support for anonymous objects
 
 ### Changed
-
 - Moved backend code to separate release module `l3backend`
 - Include `l3backend` in file names
 - Moved backend code to internal for each 'parent' module
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2019-10-11...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-11-25...HEAD
+[2019-11-25]: https://github.com/latex3/latex3/compare/2019-10-11...2019-11-25
 [2019-10-11]: https://github.com/latex3/latex3/compare/2019-09-05...2019-10-11
 [2019-09-05]: https://github.com/latex3/latex3/compare/2019-08-25...2019-09-05
 [2019-08-25]: https://github.com/latex3/latex3/compare/2019-07-01...2019-08-25

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/README.md	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/README.md	2019-11-26 21:35:55 UTC (rev 52928)
@@ -1,7 +1,7 @@
 LaTeX3 Backend Drivers
 ======================
 
-Release 2019-10-11
+Release 2019-11-25
 
 This package forms parts of `expl3`, and contains the code used to interface
 with backends (drivers) across the `expl3` codebase. The functions here are

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.tex	2019-11-26 21:35:55 UTC (rev 52928)
@@ -43,7 +43,8 @@
     l3backend-color.dtx    ,
     l3backend-draw.dtx     ,
     l3backend-graphics.dtx ,
-    l3backend-pdf.dtx
+    l3backend-pdf.dtx      ,
+    l3backend-header.dtx
   }
 \ExplSyntaxOff
 

Added: trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro
===================================================================
--- trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro	                        (rev 0)
+++ trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro	2019-11-26 21:35:55 UTC (rev 52928)
@@ -0,0 +1,402 @@
+%%
+%% This is file `l3backend-dvips.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3backend-header.dtx  (with options: `header,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 "l3backend bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: l3backend-header.dtx
+true setglobal
+/pdf.globaldict 4 dict def
+false setglobal
+
+/pdf.cvs { 65534 string cvs } def
+/pdf.dvi.pt { 72.27 mul Resolution div } def
+/pdf.pt.dvi { 72.27 div Resolution mul } def
+/pdf.rect.ht { dup 1 get neg exch 3 get add } def
+/pdf.linkmargin { 1 pdf.pt.dvi } def
+/pdf.linkdp.pad { 0 } def
+/pdf.linkht.pad { 0 } def
+/pdf.rect
+  { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def
+/pdf.save.ll
+  {
+    currentpoint
+    /pdf.lly exch def
+    /pdf.llx exch def
+  }
+    def
+/pdf.save.ur
+  {
+    currentpoint
+    /pdf.ury exch def
+    /pdf.urx exch def
+  }
+    def
+/pdf.save.linkll
+  {
+    currentpoint
+    pdf.linkmargin add
+    pdf.linkdp.pad add
+    /pdf.lly exch def
+    pdf.linkmargin sub
+    /pdf.llx exch def
+  }
+    def
+/pdf.save.linkur
+  {
+    currentpoint
+    pdf.linkmargin sub
+    pdf.linkht.pad sub
+    /pdf.ury exch def
+    pdf.linkmargin add
+    /pdf.urx exch def
+  }
+    def
+/pdf.dest.anchor
+  {
+    currentpoint exch
+    pdf.dvi.pt 72 add
+    /pdf.dest.x exch def
+    pdf.dvi.pt
+    vsize 72 sub exch sub
+    /pdf.dest.y exch def
+  }
+    def
+/pdf.dest.point
+  { pdf.dest.x pdf.dest.y } def
+/pdf.dest2device
+  {
+    /pdf.dest.y exch def
+    /pdf.dest.x exch def
+    matrix currentmatrix
+    matrix defaultmatrix
+    matrix invertmatrix
+    matrix concatmatrix
+    cvx exec
+    /pdf.dev.y exch def
+    /pdf.dev.x exch def
+    /pdf.tmpd exch def
+    /pdf.tmpc exch def
+    /pdf.tmpb exch def
+    /pdf.tmpa exch def
+    pdf.dest.x pdf.tmpa mul
+      pdf.dest.y pdf.tmpc mul add
+      pdf.dev.x add
+    pdf.dest.x pdf.tmpb mul
+     pdf.dest.y pdf.tmpd mul add
+     pdf.dev.y add
+  }
+    def
+/pdf.bordertracking false def
+/pdf.bordertracking.begin
+  {
+    SDict /pdf.bordertracking true put
+    SDict /pdf.leftboundary undef
+    SDict /pdf.rightboundary undef
+    /a where
+      {
+        /a
+          {
+            currentpoint pop
+            SDict /pdf.rightboundary known dup
+              {
+                SDict /pdf.rightboundary get 2 index lt
+                  { not }
+                if
+              }
+            if
+              { pop }
+              { SDict exch /pdf.rightboundary exch put }
+            ifelse
+            moveto
+            currentpoint pop
+            SDict /pdf.leftboundary known dup
+              {
+                SDict /pdf.leftboundary get 2 index gt
+                  { not }
+                if
+              }
+            if
+              { pop }
+              { SDict exch /pdf.leftboundary exch put }
+            ifelse
+          }
+        put
+      }
+    if
+  }
+    def
+/pdf.bordertracking.end
+  {
+    /a where { /a { moveto } put } if
+    /x where { /x { 0 exch rmoveto } put } if
+    SDict /pdf.leftboundary known
+      { pdf.outerbox 0 pdf.leftboundary put }
+    if
+    SDict /pdf.rightboundary known
+      { pdf.outerbox 2 pdf.rightboundary put }
+    if
+    SDict /pdf.bordertracking false put
+  }
+    def
+  /pdf.bordertracking.endpage
+{
+  pdf.bordertracking
+    {
+      pdf.bordertracking.end
+      true setglobal
+      pdf.globaldict
+        /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put
+      pdf.globaldict
+        /pdf.brokenlink.skip pdf.baselineskip put
+      pdf.globaldict
+        /pdf.brokenlink.dict
+          pdf.link.dict pdf.cvs put
+      false setglobal
+      mark pdf.link.dict cvx exec /Rect
+        [
+          pdf.llx
+          pdf.lly
+          pdf.outerbox 2 get pdf.linkmargin add
+          currentpoint exch pop
+          pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub
+        ]
+      /ANN pdf.pdfmark
+    }
+  if
+}
+  def
+/pdf.bordertracking.continue
+  {
+    /pdf.link.dict pdf.globaldict
+      /pdf.brokenlink.dict get def
+    /pdf.outerbox pdf.globaldict
+      /pdf.brokenlink.rect get def
+    /pdf.baselineskip pdf.globaldict
+      /pdf.brokenlink.skip get def
+    pdf.globaldict dup dup
+    /pdf.brokenlink.dict undef
+    /pdf.brokenlink.skip undef
+    /pdf.brokenlink.rect undef
+    currentpoint
+    /pdf.originy exch def
+    /pdf.originx exch def
+    /a where
+      {
+        /a
+          {
+            moveto
+            SDict
+            begin
+            currentpoint pdf.originy ne exch
+              pdf.originx ne or
+              {
+                pdf.save.linkll
+                /pdf.lly
+                  pdf.lly pdf.outerbox 1 get sub def
+                pdf.bordertracking.begin
+              }
+            if
+            end
+          }
+        put
+      }
+    if
+    /x where
+      {
+        /x
+          {
+            0 exch rmoveto
+            SDict~
+            begin
+            currentpoint
+            pdf.originy ne exch pdf.originx ne or
+              {
+                pdf.save.linkll
+                /pdf.lly
+                  pdf.lly pdf.outerbox 1 get sub def
+                pdf.bordertracking.begin
+              }
+            if
+            end
+          }
+        put
+      }
+    if
+  }
+    def
+/pdf.breaklink
+  {
+    pop
+    counttomark 2 mod 0 eq
+      {
+        counttomark /pdf.count exch def
+          {
+           pdf.count 0 eq { exit } if
+           counttomark 2 roll
+           1 index /Rect eq
+             {
+               dup 4 array copy
+               dup dup
+                 1 get
+                 pdf.outerbox pdf.rect.ht
+                 pdf.linkmargin 2 mul add sub
+                 3 exch put
+               dup
+                 pdf.outerbox 2 get
+                 pdf.linkmargin add
+                 2 exch put
+               dup dup
+                 3 get
+                 pdf.outerbox pdf.rect.ht
+                 pdf.linkmargin 2 mul add add
+                 1 exch put
+               /pdf.currentrect exch  def
+               pdf.breaklink.write
+                 {
+                   pdf.currentrect
+                   dup
+                     pdf.outerbox 0 get
+                     pdf.linkmargin sub
+                     0 exch put
+                   dup
+                     pdf.outerbox 2 get
+                     pdf.linkmargin add
+                     2 exch put
+                   dup dup
+                     1 get
+                     pdf.baselineskip add
+                     1 exch put
+                   dup dup
+                     3 get
+                     pdf.baselineskip add
+                     3 exch put
+                   /pdf.currentrect exch def
+                   pdf.breaklink.write
+                  }
+                1 index 3 get
+                pdf.linkmargin 2 mul add
+                pdf.outerbox pdf.rect.ht add
+                2 index 1 get sub
+                pdf.baselineskip div round cvi 1 sub
+                exch
+              repeat
+              pdf.currentrect
+              dup
+                pdf.outerbox 0 get
+                pdf.linkmargin sub
+                0 exch put
+              dup dup
+                1 get
+                pdf.baselineskip add
+                1 exch put
+              dup dup
+                3 get
+                pdf.baselineskip add
+                3 exch put
+              dup 2 index 2 get  2 exch put
+              /pdf.currentrect exch def
+              pdf.breaklink.write
+              SDict /pdf.pdfmark.good false put
+              exit
+            }
+            { pdf.count 2 sub /pdf.count exch def }
+          ifelse
+        }
+      loop
+    }
+  if
+  /ANN
+}
+  def
+/pdf.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 pdf.currentrect
+    /ANN pdfmark
+  }
+    def
+/pdf.pdfmark
+  {
+    SDict /pdf.pdfmark.good true put
+    dup /ANN eq
+      {
+        pdf.pdfmark.store
+        pdf.pdfmark.dict
+          begin
+            Subtype /Link eq
+            currentdict /Rect known and
+            SDict /pdf.outerbox known and
+            SDict /pdf.baselineskip known and
+              {
+                Rect 3 get
+                pdf.linkmargin 2 mul add
+                pdf.outerbox pdf.rect.ht add
+                Rect 1 get sub
+                pdf.baselineskip div round cvi 0 gt
+                  { pdf.breaklink }
+                if
+              }
+            if
+          end
+        SDict /pdf.outerbox undef
+        SDict /pdf.baselineskip undef
+        currentdict /pdf.pdfmark.dict undef
+      }
+    if
+    pdf.pdfmark.good
+      { pdfmark }
+      { cleartomark }
+    ifelse
+  }
+    def
+/pdf.pdfmark.store
+  {
+    /pdf.pdfmark.dict 65534 dict def
+    counttomark 1 add copy
+    pop
+      {
+        dup mark eq
+          {
+            pop
+            exit
+          }
+          {
+            pdf.pdfmark.dict
+            begin def end
+          }
+        ifelse
+      }
+    loop
+}
+  def
+%% 
+%%
+%% End of file `l3backend-dvips.pro'.


Property changes on: trunk/Master/texmf-dist/dvips/l3backend/l3backend-dvips.pro
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx	2019-11-26 21:35:55 UTC (rev 52928)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-10-11}
+% \date{Released 2019-11-25}
 %
 % \maketitle
 %
@@ -151,25 +151,15 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\__kernel_backend_postscript_header:n}
-%   PostScript for the header: a small saving but makes the code clearer.
-%   This is held until the start of shipout such that a document with no
-%   actual output does not write anything.
+% PostScript for the header: a small saving but makes the code clearer.
+% This is held until the start of shipout such that a document with no
+% actual output does not write anything.
 %    \begin{macrocode}
-\cs_new_protected:Npx \__kernel_backend_postscript_header:n #1
-%<*initex>
-  { \__kernel_backend_literal:n { ! #1 } }
-%</initex>
-%<*package>
-  {
-    \cs_if_exist:NTF \AtBeginDvi
-      { \exp_not:N \AtBeginDvi }
-      { \use:n }
-        { \__kernel_backend_literal:n { ! #1 } }
-  }
-%</package>
+\cs_if_exist:NTF \AtBeginDvi
+  { \exp_not:N \AtBeginDvi }
+  { \use:n }
+    { \__kernel_backend_literal:n { header = l3backend-dvips.pro } }
 %    \end{macrocode}
-% \end{macro}
 %
 % \begin{macro}
 %   {

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx	2019-11-26 21:35:55 UTC (rev 52928)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-10-11}
+% \date{Released 2019-11-25}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx	2019-11-26 21:35:55 UTC (rev 52928)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-10-11}
+% \date{Released 2019-11-25}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx	2019-11-26 21:35:55 UTC (rev 52928)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-10-11}
+% \date{Released 2019-11-25}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx	2019-11-26 21:35:55 UTC (rev 52928)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-10-11}
+% \date{Released 2019-11-25}
 %
 % \maketitle
 %

Added: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx	2019-11-26 21:35:55 UTC (rev 52928)
@@ -0,0 +1,574 @@
+% \iffalse meta-comment
+%
+%% File: l3backend-header.dtx
+%
+% Copyright (C) 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 "l3backend bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+%    https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver>
+\documentclass[full,kernel]{l3doc}
+\begin{document}
+  \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+%   The \textsf{l3backend-header} package\\ Backend graphics support^^A
+% }
+%
+% \author{^^A
+%  The \LaTeX3 Project\thanks
+%    {^^A
+%      E-mail:
+%        \href{mailto:latex-team at latex-project.org}
+%          {latex-team at latex-project.org}^^A
+%    }^^A
+% }
+%
+% \date{Released 2019-11-25}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3backend-header} Implementation}
+%
+%    \begin{macrocode}
+%<*dvips&header>
+%    \end{macrocode}
+%
+% \begin{macro}{pdf.globaldict}
+%   A small global dictionary for backend use.
+%    \begin{macrocode}
+true setglobal
+/pdf.globaldict 4 dict def
+false setglobal
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     pdf.cvs     ,
+%     pdf.dvi.pt  ,
+%     pdf.pt.dvi  ,
+%     pdf.rect.ht
+%   }
+%   Small utilities for PostScript manipulations. Conversion to DVI dimensions
+%   is done here to allow for |Resolution|. The total height of a rectangle
+%   (an array) needs a little maths, in contrast to simply extracting a value.
+%    \begin{macrocode}
+
+/pdf.cvs { 65534 string cvs } def
+/pdf.dvi.pt { 72.27 mul Resolution div } def
+/pdf.pt.dvi { 72.27 div Resolution mul } def
+/pdf.rect.ht { dup 1 get neg exch 3 get add } def
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{pdf.linkmargin, pdf.linkdp.pad, pdf.linkht.pad}
+%   Settings which are defined up-front in |SDict|.
+%    \begin{macrocode}
+/pdf.linkmargin { 1 pdf.pt.dvi } def
+/pdf.linkdp.pad { 0 } def
+/pdf.linkht.pad { 0 } def
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     pdf.rect        ,
+%     pdf.save.ll     ,
+%     pdf.save.ur     ,
+%     pdf.save.linkll ,
+%     pdf.save.linkur ,
+%     pdf.llx         ,
+%     pdf.lly         ,
+%     pdf.urx         ,
+%     pdf.ury
+%   }
+%   Functions for marking the limits of an annotation/link, plus drawing the
+%   border. We separate links for generic annotations to support adding a
+%   margin and setting a minimal size.
+%    \begin{macrocode}
+/pdf.rect
+  { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def
+/pdf.save.ll
+  {
+    currentpoint
+    /pdf.lly exch def
+    /pdf.llx exch def
+  }
+    def
+/pdf.save.ur
+  {
+    currentpoint
+    /pdf.ury exch def
+    /pdf.urx exch def
+  }
+    def
+/pdf.save.linkll
+  {
+    currentpoint
+    pdf.linkmargin add
+    pdf.linkdp.pad add
+    /pdf.lly exch def
+    pdf.linkmargin sub
+    /pdf.llx exch def
+  }
+    def
+/pdf.save.linkur
+  {
+    currentpoint
+    pdf.linkmargin sub
+    pdf.linkht.pad sub
+    /pdf.ury exch def
+    pdf.linkmargin add
+    /pdf.urx exch def
+  }
+    def
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     pdf.dest.anchor ,
+%     pdf.dest.x      ,
+%     pdf.dest.y      ,
+%     pdf.dest.point  ,
+%     pdf.dest2device ,
+%     pdf.dev.x       ,
+%     pdf.dev.y       ,
+%     pdf.tmpa        ,
+%     pdf.tmpb        ,
+%     pdf.tmpc        ,
+%     pdf.tmpd
+%   }
+%   For finding the anchor point of a destination link. We make the use case
+%   a separate function as it comes up a lot, and as this makes it easier to
+%   adjust if we need additional effects. We also need a more complex approach
+%   to convert a co-ordinate pair correctly when defining a rectangle: this
+%   can otherwise be out when using a landscape page. (Thanks to Alexander
+%   Grahn for the approach here.)
+%    \begin{macrocode}
+/pdf.dest.anchor
+  {
+    currentpoint exch
+    pdf.dvi.pt 72 add
+    /pdf.dest.x exch def
+    pdf.dvi.pt
+    vsize 72 sub exch sub
+    /pdf.dest.y exch def
+  }
+    def
+/pdf.dest.point
+  { pdf.dest.x pdf.dest.y } def
+/pdf.dest2device
+  {
+    /pdf.dest.y exch def
+    /pdf.dest.x exch def
+    matrix currentmatrix
+    matrix defaultmatrix
+    matrix invertmatrix
+    matrix concatmatrix
+    cvx exec
+    /pdf.dev.y exch def
+    /pdf.dev.x exch def
+    /pdf.tmpd exch def
+    /pdf.tmpc exch def
+    /pdf.tmpb exch def
+    /pdf.tmpa exch def
+    pdf.dest.x pdf.tmpa mul
+      pdf.dest.y pdf.tmpc mul add
+      pdf.dev.x add
+    pdf.dest.x pdf.tmpb mul
+     pdf.dest.y pdf.tmpd mul add
+     pdf.dev.y add
+  }
+    def
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     pdf.bordertracking          ,
+%     pdf.bordertracking.begin    ,
+%     pdf.bordertracking.end      ,
+%     pdf.leftboundary            ,
+%     pdf.rightboundary           ,
+%     pdf.brokenlink.rect         ,
+%     pdf.brokenlink.skip         ,
+%     pdf.brokenlink.dict         ,
+%     pdf.bordertracking.endpage  ,
+%     pdf.bordertracking.continue ,
+%     pdf.originx                 ,
+%     pdf.originy
+%   }
+%    To know where a breakable link can go, we need to track the boundary
+%    rectangle. That can be done by hooking into |a| and |x| operations:
+%    those names have to be retained. The boundary is stored at the end of
+%    the operation. Special effort is needed at the start and end of pages
+%    (or rather galleys), such that everything works properly.
+%    \begin{macrocode}
+/pdf.bordertracking false def
+/pdf.bordertracking.begin
+  {
+    SDict /pdf.bordertracking true put
+    SDict /pdf.leftboundary undef
+    SDict /pdf.rightboundary undef
+    /a where
+      {
+        /a
+          {
+            currentpoint pop
+            SDict /pdf.rightboundary known dup
+              {
+                SDict /pdf.rightboundary get 2 index lt
+                  { not }
+                if
+              }
+            if
+              { pop }
+              { SDict exch /pdf.rightboundary exch put }
+            ifelse
+            moveto
+            currentpoint pop
+            SDict /pdf.leftboundary known dup
+              {
+                SDict /pdf.leftboundary get 2 index gt
+                  { not }
+                if
+              }
+            if
+              { pop }
+              { SDict exch /pdf.leftboundary exch put }
+            ifelse
+          }
+        put
+      }
+    if
+  }
+    def
+/pdf.bordertracking.end
+  {
+    /a where { /a { moveto } put } if
+    /x where { /x { 0 exch rmoveto } put } if
+    SDict /pdf.leftboundary known
+      { pdf.outerbox 0 pdf.leftboundary put }
+    if
+    SDict /pdf.rightboundary known
+      { pdf.outerbox 2 pdf.rightboundary put }
+    if
+    SDict /pdf.bordertracking false put
+  }
+    def
+  /pdf.bordertracking.endpage
+{
+  pdf.bordertracking
+    {
+      pdf.bordertracking.end
+      true setglobal
+      pdf.globaldict
+        /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put
+      pdf.globaldict
+        /pdf.brokenlink.skip pdf.baselineskip put
+      pdf.globaldict
+        /pdf.brokenlink.dict
+          pdf.link.dict pdf.cvs put
+      false setglobal
+      mark pdf.link.dict cvx exec /Rect
+        [
+          pdf.llx
+          pdf.lly
+          pdf.outerbox 2 get pdf.linkmargin add
+          currentpoint exch pop
+          pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub
+        ]
+      /ANN pdf.pdfmark
+    }
+  if
+}
+  def
+/pdf.bordertracking.continue
+  {
+    /pdf.link.dict pdf.globaldict
+      /pdf.brokenlink.dict get def
+    /pdf.outerbox pdf.globaldict
+      /pdf.brokenlink.rect get def
+    /pdf.baselineskip pdf.globaldict
+      /pdf.brokenlink.skip get def
+    pdf.globaldict dup dup
+    /pdf.brokenlink.dict undef
+    /pdf.brokenlink.skip undef
+    /pdf.brokenlink.rect undef
+    currentpoint
+    /pdf.originy exch def
+    /pdf.originx exch def
+    /a where
+      {
+        /a
+          {
+            moveto
+            SDict
+            begin
+            currentpoint pdf.originy ne exch
+              pdf.originx ne or
+              {
+                pdf.save.linkll
+                /pdf.lly
+                  pdf.lly pdf.outerbox 1 get sub def
+                pdf.bordertracking.begin
+              }
+            if
+            end
+          }
+        put
+      }
+    if
+    /x where
+      {
+        /x
+          {
+            0 exch rmoveto
+            SDict~
+            begin
+            currentpoint
+            pdf.originy ne exch pdf.originx ne or
+              {
+                pdf.save.linkll
+                /pdf.lly
+                  pdf.lly pdf.outerbox 1 get sub def
+                pdf.bordertracking.begin
+              }
+            if
+            end
+          }
+        put
+      }
+    if
+  }
+    def
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     pdf.breaklink       ,
+%     pdf.breaklink.write ,
+%     pdf.count           ,
+%     pdf.currentrect
+%   }
+%   Dealing with link breaking itself has multiple stage. The first step is to
+%   find the |Rect| entry in the dictionary, looping over key--value pairs.
+%   The first line is handled first, adjusting the rectangle to stay inside the
+%   text area. The second phase is a loop over the height of the bulk of the
+%   link area, done on the basis of a number of baselines. Finally, the end of
+%   the link area is tidied up, again from the boundary of the text area.
+%    \begin{macrocode}
+/pdf.breaklink
+  {
+    pop
+    counttomark 2 mod 0 eq
+      {
+        counttomark /pdf.count exch def
+          {
+           pdf.count 0 eq { exit } if
+           counttomark 2 roll
+           1 index /Rect eq
+             {
+               dup 4 array copy
+               dup dup
+                 1 get
+                 pdf.outerbox pdf.rect.ht
+                 pdf.linkmargin 2 mul add sub
+                 3 exch put
+               dup
+                 pdf.outerbox 2 get
+                 pdf.linkmargin add
+                 2 exch put
+               dup dup
+                 3 get
+                 pdf.outerbox pdf.rect.ht
+                 pdf.linkmargin 2 mul add add
+                 1 exch put
+               /pdf.currentrect exch  def
+               pdf.breaklink.write
+                 {
+                   pdf.currentrect
+                   dup
+                     pdf.outerbox 0 get
+                     pdf.linkmargin sub
+                     0 exch put
+                   dup
+                     pdf.outerbox 2 get
+                     pdf.linkmargin add
+                     2 exch put
+                   dup dup
+                     1 get
+                     pdf.baselineskip add
+                     1 exch put
+                   dup dup
+                     3 get
+                     pdf.baselineskip add
+                     3 exch put
+                   /pdf.currentrect exch def
+                   pdf.breaklink.write
+                  }
+                1 index 3 get
+                pdf.linkmargin 2 mul add
+                pdf.outerbox pdf.rect.ht add
+                2 index 1 get sub
+                pdf.baselineskip div round cvi 1 sub
+                exch
+              repeat
+              pdf.currentrect
+              dup
+                pdf.outerbox 0 get
+                pdf.linkmargin sub
+                0 exch put
+              dup dup
+                1 get
+                pdf.baselineskip add
+                1 exch put
+              dup dup
+                3 get
+                pdf.baselineskip add
+                3 exch put
+              dup 2 index 2 get  2 exch put
+              /pdf.currentrect exch def
+              pdf.breaklink.write
+              SDict /pdf.pdfmark.good false put
+              exit
+            }
+            { pdf.count 2 sub /pdf.count exch def }
+          ifelse
+        }
+      loop
+    }
+  if
+  /ANN
+}
+  def
+/pdf.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 pdf.currentrect
+    /ANN pdfmark
+  }
+    def
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     pdf.pdfmark      ,
+%     pdf.pdfmark.good ,
+%     pdf.outerbox     ,
+%     pdf.baselineskip ,
+%     pdf.pdfmark.dict
+%   }
+%   The business end of breaking links starts by hooking into |pdfmarks|.
+%   Unlike \pkg{hypdvips}, we avoid altering any links we have not created
+%   by using a copy of the core |pdfmarks| function. Only mark types which
+%   are known are altered. At present, this is purely |ANN| marks, which are
+%   measured relative to the size of the baseline skip. If they are
+%   more than one apparent line high, breaking is applied.
+%    \begin{macrocode}
+/pdf.pdfmark
+  {
+    SDict /pdf.pdfmark.good true put
+    dup /ANN eq
+      {
+        pdf.pdfmark.store
+        pdf.pdfmark.dict
+          begin
+            Subtype /Link eq
+            currentdict /Rect known and
+            SDict /pdf.outerbox known and
+            SDict /pdf.baselineskip known and
+              {
+                Rect 3 get
+                pdf.linkmargin 2 mul add
+                pdf.outerbox pdf.rect.ht add
+                Rect 1 get sub
+                pdf.baselineskip div round cvi 0 gt
+                  { pdf.breaklink }
+                if
+              }
+            if
+          end
+        SDict /pdf.outerbox undef
+        SDict /pdf.baselineskip undef
+        currentdict /pdf.pdfmark.dict undef
+      }
+    if
+    pdf.pdfmark.good
+      { pdfmark }
+      { cleartomark }
+    ifelse
+  }
+    def
+/pdf.pdfmark.store
+  {
+    /pdf.pdfmark.dict 65534 dict def
+    counttomark 1 add copy
+    pop
+      {
+        dup mark eq
+          {
+            pop
+            exit
+          }
+          {
+            pdf.pdfmark.dict
+            begin def end
+          }
+        ifelse
+      }
+    loop
+}
+  def
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</dvips&header>
+%    \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex


Property changes on: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx	2019-11-26 21:35:55 UTC (rev 52928)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-10-11}
+% \date{Released 2019-11-25}
 %
 % \maketitle
 %
@@ -232,535 +232,6 @@
 % In \texttt{dvips}, annotations have to be constructed manually. As such,
 % we need the object code above for some definitions.
 %
-% \begin{macro}{pdf.globaldict}
-%   A small global dictionary for backend use.
-%    \begin{macrocode}
-\__kernel_backend_postscript_header:n
-  {
-    true ~ setglobal ~
-    /pdf.globaldict ~ 4 ~ dict ~ def ~
-    false ~ setglobal
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-%   {
-%     pdf.cvs     ,
-%     pdf.dvi.pt  ,
-%     pdf.pt.dvi  ,
-%     pdf.rect.ht
-%   }
-%   Small utilities for PostScript manipulations. Conversion to DVI dimensions
-%   is done here to allow for |Resolution|. The total height of a rectangle
-%   (an array) needs a little maths, in contrast to simply extracting a value.
-%    \begin{macrocode}
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.cvs { 65534 ~ string ~ cvs } def
-    /pdf.dvi.pt { 72.27 ~ mul ~ Resolution ~ div } def
-    /pdf.pt.dvi { 72.27 ~ div ~ Resolution ~ mul } def
-    /pdf.rect.ht { dup ~ 1 ~ get ~ neg ~ exch ~ 3 ~ get ~ add } def
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{pdf.linkmargin, pdf.linkdp.pad, pdf.linkht.pad}
-%   Settings which are defined up-front in |SDict|.
-%    \begin{macrocode}
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.linkmargin { 1 ~ pdf.pt.dvi } def
-    /pdf.linkdp.pad { 0 } def
-    /pdf.linkht.pad { 0 } def
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-%   {
-%     pdf.rect        ,
-%     pdf.save.ll     ,
-%     pdf.save.ur     ,
-%     pdf.save.linkll ,
-%     pdf.save.linkur ,
-%     pdf.llx         ,
-%     pdf.lly         ,
-%     pdf.urx         ,
-%     pdf.ury
-%   }
-%   Functions for marking the limits of an annotation/link, plus drawing the
-%   border. We separate links for generic annotations to support adding a
-%   margin and setting a minimal size.
-%    \begin{macrocode}
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.rect
-      { /Rect [ pdf.llx ~ pdf.lly ~ pdf.urx ~ pdf.ury ] } def
-    /pdf.save.ll
-      {
-        currentpoint
-        /pdf.lly ~ exch ~ def
-        /pdf.llx ~ exch ~ def
-      }
-        def
-    /pdf.save.ur
-      {
-        currentpoint
-        /pdf.ury ~ exch ~ def
-        /pdf.urx ~ exch ~ def
-      }
-        def
-    /pdf.save.linkll
-      {
-        currentpoint ~
-        pdf.linkmargin ~ add ~
-        pdf.linkdp.pad ~ add
-        /pdf.lly ~ exch ~ def ~
-        pdf.linkmargin ~ sub
-        /pdf.llx ~ exch ~ def
-      }
-        def
-    /pdf.save.linkur
-      {
-        currentpoint ~
-        pdf.linkmargin ~ sub ~
-        pdf.linkht.pad ~ sub
-        /pdf.ury ~ exch ~ def ~
-        pdf.linkmargin ~ add
-        /pdf.urx ~ exch ~ def
-      }
-        def
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-%   {
-%     pdf.dest.anchor ,
-%     pdf.dest.x      ,
-%     pdf.dest.y      ,
-%     pdf.dest.point  ,
-%     pdf.dest2device ,
-%     pdf.dev.x       ,
-%     pdf.dev.y       ,
-%     pdf.tmpa        ,
-%     pdf.tmpb        ,
-%     pdf.tmpc        ,
-%     pdf.tmpd
-%   }
-%   For finding the anchor point of a destination link. We make the use case
-%   a separate function as it comes up a lot, and as this makes it easier to
-%   adjust if we need additional effects. We also need a more complex approach
-%   to convert a co-ordinate pair correctly when defining a rectangle: this
-%   can otherwise be out when using a landscape page. (Thanks to Alexander
-%   Grahn for the approach here.)
-%    \begin{macrocode}
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.dest.anchor
-      {
-        currentpoint ~ exch ~
-        pdf.dvi.pt ~ 72 ~ add ~
-        /pdf.dest.x ~ exch ~ def ~
-        pdf.dvi.pt ~
-        vsize ~ 72 ~ sub ~ exch ~ sub ~
-        /pdf.dest.y ~ exch ~ def
-      }
-        def
-    /pdf.dest.point
-      { pdf.dest.x ~ pdf.dest.y } def
-   /pdf.dest2device
-     {
-       /pdf.dest.y ~ exch ~ def
-       /pdf.dest.x ~ exch ~ def ~
-       matrix ~ currentmatrix ~
-       matrix ~ defaultmatrix ~
-       matrix ~ invertmatrix ~
-       matrix ~ concatmatrix ~
-       cvx ~ exec
-       /pdf.dev.y ~ exch ~ def
-       /pdf.dev.x ~ exch ~ def
-       /pdf.tmpd ~ exch ~ def
-       /pdf.tmpc ~ exch ~ def
-       /pdf.tmpb ~ exch ~ def
-       /pdf.tmpa ~ exch ~ def ~
-       pdf.dest.x ~ pdf.tmpa ~ mul ~
-         pdf.dest.y ~ pdf.tmpc ~ mul ~ add ~
-         pdf.dev.x ~ add ~
-       pdf.dest.x ~ pdf.tmpb ~ mul ~
-         pdf.dest.y ~ pdf.tmpd ~ mul ~ add ~
-         pdf.dev.y ~ add
-     }
-       def
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-%   {
-%     pdf.bordertracking          ,
-%     pdf.bordertracking.begin    ,
-%     pdf.bordertracking.end      ,
-%     pdf.leftboundary            ,
-%     pdf.rightboundary           ,
-%     pdf.brokenlink.rect         ,
-%     pdf.brokenlink.skip         ,
-%     pdf.brokenlink.dict         ,
-%     pdf.bordertracking.endpage  ,
-%     pdf.bordertracking.continue ,
-%     pdf.originx                 ,
-%     pdf.originy
-%   }
-%    To know where a breakable link can go, we need to track the boundary
-%    rectangle. That can be done by hooking into |a| and |x| operations:
-%    those names have to be retained. The boundary is stored at the end of
-%    the operation. Special effort is needed at the start and end of pages
-%    (or rather galleys), such that everything works properly.
-%    \begin{macrocode}
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.bordertracking ~ false ~ def
-    /pdf.bordertracking.begin
-      {
-        SDict ~ /pdf.bordertracking ~ true ~ put ~
-        SDict ~ /pdf.leftboundary ~ undef ~
-        SDict ~ /pdf.rightboundary ~ undef ~
-        /a ~ where
-          {
-            /a
-              {
-                currentpoint ~ pop ~
-                SDict /pdf.rightboundary ~ known ~ dup
-                  {
-                    SDict /pdf.rightboundary ~ get ~ 2 ~ index ~ lt
-                      { not }
-                    if
-                  }
-                if
-                  { pop }
-                  { SDict ~ exch /pdf.rightboundary ~ exch ~ put }
-                ifelse ~
-                moveto ~
-                currentpoint ~ pop ~
-                SDict /pdf.leftboundary ~ known ~ dup
-                  {
-                    SDict /pdf.leftboundary ~ get ~ 2 ~ index ~ gt
-                      { not }
-                    if
-                  }
-                if
-                  { pop }
-                  { SDict ~ exch /pdf.leftboundary ~ exch ~ put }
-                ifelse
-              }
-            put
-          }
-        if
-      }
-        def
-    /pdf.bordertracking.end
-      {
-        /a ~ where { /a { moveto } put } if
-        /x ~ where { /x { 0 ~ exch ~ rmoveto } put } if ~
-        SDict /pdf.leftboundary ~ known
-          { pdf.outerbox ~ 0 ~ pdf.leftboundary ~ put }
-        if ~
-        SDict /pdf.rightboundary ~ known
-          { pdf.outerbox ~ 2 ~ pdf.rightboundary ~ put }
-        if ~
-        SDict /pdf.bordertracking ~ false ~ put
-      }
-        def
-  /pdf.bordertracking.endpage
-    {
-      pdf.bordertracking
-        {
-          pdf.bordertracking.end ~
-          true ~ setglobal ~
-          pdf.globaldict
-            /pdf.brokenlink.rect [ pdf.outerbox ~ aload ~ pop ] put ~
-          pdf.globaldict
-            /pdf.brokenlink.skip ~ pdf.baselineskip ~ put ~
-          pdf.globaldict
-            /pdf.brokenlink.dict ~
-              pdf.link.dict ~ pdf.cvs ~ put ~
-          false ~ setglobal ~
-          mark ~ pdf.link.dict ~ cvx ~ exec ~ /Rect
-            [
-              pdf.llx ~
-              pdf.lly ~
-              pdf.outerbox ~ 2 ~ get ~ pdf.linkmargin ~ add ~
-              currentpoint ~ exch ~ pop ~
-              pdf.outerbox ~ pdf.rect.ht ~ sub ~ pdf.linkmargin ~ sub
-            ]
-          /ANN ~ pdf.pdfmark
-        }
-      if
-    }
-      def
-    /pdf.bordertracking.continue
-      {
-        /pdf.link.dict ~ pdf.globaldict
-          /pdf.brokenlink.dict ~ get ~ def
-        /pdf.outerbox ~ pdf.globaldict
-          /pdf.brokenlink.rect ~ get ~ def
-        /pdf.baselineskip ~ pdf.globaldict
-          /pdf.brokenlink.skip ~ get ~ def ~
-        pdf.globaldict ~ dup ~ dup
-        /pdf.brokenlink.dict ~ undef
-        /pdf.brokenlink.skip ~ undef
-        /pdf.brokenlink.rect ~ undef ~
-        currentpoint
-        /pdf.originy ~ exch ~ def
-        /pdf.originx ~ exch ~ def
-        /a ~ where
-          {
-            /a
-              {
-                moveto ~
-                SDict ~
-                begin ~
-                currentpoint ~ pdf.originy ~ ne ~ exch ~
-                  pdf.originx ~ ne ~ or
-                  {
-                    pdf.save.linkll
-                    /pdf.lly ~
-                      pdf.lly ~ pdf.outerbox ~ 1 ~ get ~ sub ~ def ~
-                    pdf.bordertracking.begin
-                  }
-                if ~
-                end
-              }
-            put
-          }
-        if
-        /x ~ where
-          {
-            /x
-              {
-                0 ~ exch ~ rmoveto ~
-                SDict~
-                begin ~
-                currentpoint ~
-                pdf.originy ~ ne ~ exch ~ pdf.originx ~ ne ~ or
-                  {
-                    pdf.save.linkll
-                    /pdf.lly ~
-                      pdf.lly ~ pdf.outerbox ~ 1 ~ get ~ sub ~ def ~
-                    pdf.bordertracking.begin
-                  }
-                if ~
-                end
-              }
-            put
-          }
-        if
-      }
-        def
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-%   {
-%     pdf.breaklink       ,
-%     pdf.breaklink.write ,
-%     pdf.count           ,
-%     pdf.currentrect
-%   }
-%   Dealing with link breaking itself has multiple stage. The first step is to
-%   find the |Rect| entry in the dictionary, looping over key--value pairs.
-%   The first line is handled first, adjusting the rectangle to stay inside the
-%   text area. The second phase is a loop over the height of the bulk of the
-%   link area, done on the basis of a number of baselines. Finally, the end of
-%   the link area is tidied up, again from the boundary of the text area.
-%    \begin{macrocode}
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.breaklink
-      {
-        pop ~
-        counttomark ~ 2 ~ mod ~ 0 ~ eq
-          {
-            counttomark /pdf.count ~ exch ~ def
-              {
-               pdf.count ~ 0 ~ eq { exit } if ~
-               counttomark ~ 2 ~ roll ~
-               1 ~ index ~ /Rect ~ eq
-                 {
-                   dup ~ 4 ~ array ~ copy ~
-                   dup ~ dup ~
-                     1 ~ get ~
-                     pdf.outerbox ~ pdf.rect.ht ~
-                     pdf.linkmargin ~ 2 ~ mul ~ add ~ sub ~
-                     3 ~ exch ~ put ~
-                   dup ~
-                     pdf.outerbox ~ 2 ~ get ~
-                     pdf.linkmargin ~ add ~
-                     2 ~ exch ~ put ~
-                   dup ~ dup ~
-                     3 ~ get ~
-                     pdf.outerbox ~ pdf.rect.ht ~
-                     pdf.linkmargin ~ 2 ~ mul ~ add ~ add ~
-                     1 ~ exch ~ put
-                   /pdf.currentrect ~ exch ~  def ~
-                   pdf.breaklink.write
-                     {
-                       pdf.currentrect ~
-                       dup ~
-                         pdf.outerbox ~ 0 ~ get ~
-                         pdf.linkmargin ~ sub ~
-                         0 ~ exch ~ put ~
-                       dup ~
-                         pdf.outerbox ~ 2 ~ get ~
-                         pdf.linkmargin ~ add ~
-                         2 ~ exch ~ put ~
-                       dup ~ dup ~
-                         1 ~ get ~
-                         pdf.baselineskip ~ add ~
-                         1 ~ exch ~ put ~
-                       dup ~ dup ~
-                         3 ~ get ~
-                         pdf.baselineskip ~ add ~
-                         3 ~ exch ~ put ~
-                       /pdf.currentrect ~ exch ~ def ~
-                       pdf.breaklink.write
-                      }
-                    1 ~ index ~ 3 ~ get ~
-                    pdf.linkmargin ~ 2 ~ mul ~ add ~
-                    pdf.outerbox ~ pdf.rect.ht ~ add ~
-                    2 ~ index ~ 1 ~ get ~ sub ~
-                    pdf.baselineskip ~ div ~ round ~ cvi ~ 1 ~ sub ~
-                    exch ~
-                  repeat ~
-                  pdf.currentrect ~
-                  dup ~
-                    pdf.outerbox ~ 0 ~ get ~
-                    pdf.linkmargin ~ sub ~
-                    0 ~ exch ~ put ~
-                  dup ~ dup ~
-                    1 ~ get ~
-                    pdf.baselineskip ~ add ~
-                    1 ~ exch ~ put ~
-                  dup ~ dup ~
-                    3 ~ get ~
-                    pdf.baselineskip ~ add ~
-                    3 ~ exch ~ put ~
-                  dup ~ 2 ~ index ~ 2 ~ get ~  2 ~ exch ~ put
-                  /pdf.currentrect ~ exch ~ def ~
-                  pdf.breaklink.write ~
-                  SDict /pdf.pdfmark.good ~ false ~ put ~
-                  exit
-                }
-                { pdf.count ~ 2 ~ sub /pdf.count ~ exch ~ def }
-              ifelse
-            }
-          loop
-        }
-      if
-      /ANN
-    }
-      def
-    /pdf.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 ~ pdf.currentrect
-        /ANN ~ pdfmark
-      }
-        def
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-%   {
-%     pdf.pdfmark      ,
-%     pdf.pdfmark.good ,
-%     pdf.outerbox     ,
-%     pdf.baselineskip ,
-%     pdf.pdfmark.dict
-%   }
-%   The business end of breaking links starts by hooking into |pdfmarks|.
-%   Unlike \pkg{hypdvips}, we avoid altering any links we have not created
-%   by using a copy of the core |pdfmarks| function. Only mark types which
-%   are known are altered. At present, this is purely |ANN| marks, which are
-%   measured relative to the size of the baseline skip. If they are
-%   more than one apparent line high, breaking is applied.
-%    \begin{macrocode}
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.pdfmark
-      {
-        SDict /pdf.pdfmark.good ~ true ~ put ~
-        dup /ANN ~ eq
-          {
-            pdf.pdfmark.store ~
-            pdf.pdfmark.dict ~
-              begin ~
-                Subtype /Link ~ eq ~
-                currentdict /Rect ~ known ~ and ~
-                SDict /pdf.outerbox ~ known ~ and ~
-                SDict /pdf.baselineskip ~ known ~ and ~
-                  {
-                    Rect ~ 3 ~ get ~
-                    pdf.linkmargin ~ 2 ~ mul ~ add ~
-                    pdf.outerbox ~ pdf.rect.ht ~ add ~
-                    Rect ~ 1 ~ get ~ sub ~
-                    pdf.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt
-                      { pdf.breaklink }
-                    if
-                  }
-                if ~
-              end ~
-            SDict /pdf.outerbox ~ undef ~
-            SDict /pdf.baselineskip ~ undef ~
-            currentdict /pdf.pdfmark.dict ~ undef ~
-          }
-        if ~
-        pdf.pdfmark.good
-          { pdfmark }
-          { cleartomark }
-        ifelse
-      }
-        def
-    /pdf.pdfmark.store
-      {
-        /pdf.pdfmark.dict ~ 65534 ~ dict ~ def ~
-        counttomark ~ 1 ~ add ~ copy ~
-        pop
-          {
-            dup ~ mark ~ eq
-              {
-                pop ~
-                exit
-              }
-              {
-                pdf.pdfmark.dict ~
-                begin ~ def ~ end
-              }
-            ifelse
-          }
-        loop
-    }
-      def
-  }
-%    \end{macrocode}
-% \end{macro}
-%
 % \begin{variable}{\l_@@_backend_content_box}
 %   The content of an annotation.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend.ins	2019-11-26 21:35:55 UTC (rev 52928)
@@ -77,6 +77,10 @@
         \from{l3backend-graphics.dtx}{package,dvips}
         \from{l3backend-pdf.dtx}     {package,dvips}
       }
+    \file{l3backend-dvips.pro}
+      {
+        \from{l3backend-header.dtx}  {header,dvips}
+      }
   }
 \generate
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def	2019-11-26 21:35:40 UTC (rev 52927)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def	2019-11-26 21:35:55 UTC (rev 52928)
@@ -37,13 +37,10 @@
 \cs_new_protected:Npn \__kernel_backend_postscript:n #1
   { \__kernel_backend_literal:n { ps: SDict ~ begin ~ #1 ~ end } }
 \cs_generate_variant:Nn \__kernel_backend_postscript:n { x }
-\cs_new_protected:Npx \__kernel_backend_postscript_header:n #1
-  {
-    \cs_if_exist:NTF \AtBeginDvi
-      { \exp_not:N \AtBeginDvi }
-      { \use:n }
-        { \__kernel_backend_literal:n { ! #1 } }
-  }
+\cs_if_exist:NTF \AtBeginDvi
+  { \exp_not:N \AtBeginDvi }
+  { \use:n }
+    { \__kernel_backend_literal:n { header = l3backend-dvips.pro } }
 \cs_new_protected:Npn \__kernel_backend_align_begin:
   {
     \__kernel_backend_literal:n { ps::[begin] }
@@ -514,407 +511,6 @@
 \cs_generate_variant:Nn \__pdf_backend_object_now:nn { nx }
 \cs_new:Npn \__pdf_backend_object_last:
   { { pdf.obj \int_use:N \g__pdf_backend_object_int } }
-\__kernel_backend_postscript_header:n
-  {
-    true ~ setglobal ~
-    /pdf.globaldict ~ 4 ~ dict ~ def ~
-    false ~ setglobal
-  }
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.cvs { 65534 ~ string ~ cvs } def
-    /pdf.dvi.pt { 72.27 ~ mul ~ Resolution ~ div } def
-    /pdf.pt.dvi { 72.27 ~ div ~ Resolution ~ mul } def
-    /pdf.rect.ht { dup ~ 1 ~ get ~ neg ~ exch ~ 3 ~ get ~ add } def
-  }
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.linkmargin { 1 ~ pdf.pt.dvi } def
-    /pdf.linkdp.pad { 0 } def
-    /pdf.linkht.pad { 0 } def
-  }
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.rect
-      { /Rect [ pdf.llx ~ pdf.lly ~ pdf.urx ~ pdf.ury ] } def
-    /pdf.save.ll
-      {
-        currentpoint
-        /pdf.lly ~ exch ~ def
-        /pdf.llx ~ exch ~ def
-      }
-        def
-    /pdf.save.ur
-      {
-        currentpoint
-        /pdf.ury ~ exch ~ def
-        /pdf.urx ~ exch ~ def
-      }
-        def
-    /pdf.save.linkll
-      {
-        currentpoint ~
-        pdf.linkmargin ~ add ~
-        pdf.linkdp.pad ~ add
-        /pdf.lly ~ exch ~ def ~
-        pdf.linkmargin ~ sub
-        /pdf.llx ~ exch ~ def
-      }
-        def
-    /pdf.save.linkur
-      {
-        currentpoint ~
-        pdf.linkmargin ~ sub ~
-        pdf.linkht.pad ~ sub
-        /pdf.ury ~ exch ~ def ~
-        pdf.linkmargin ~ add
-        /pdf.urx ~ exch ~ def
-      }
-        def
-  }
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.dest.anchor
-      {
-        currentpoint ~ exch ~
-        pdf.dvi.pt ~ 72 ~ add ~
-        /pdf.dest.x ~ exch ~ def ~
-        pdf.dvi.pt ~
-        vsize ~ 72 ~ sub ~ exch ~ sub ~
-        /pdf.dest.y ~ exch ~ def
-      }
-        def
-    /pdf.dest.point
-      { pdf.dest.x ~ pdf.dest.y } def
-   /pdf.dest2device
-     {
-       /pdf.dest.y ~ exch ~ def
-       /pdf.dest.x ~ exch ~ def ~
-       matrix ~ currentmatrix ~
-       matrix ~ defaultmatrix ~
-       matrix ~ invertmatrix ~
-       matrix ~ concatmatrix ~
-       cvx ~ exec
-       /pdf.dev.y ~ exch ~ def
-       /pdf.dev.x ~ exch ~ def
-       /pdf.tmpd ~ exch ~ def
-       /pdf.tmpc ~ exch ~ def
-       /pdf.tmpb ~ exch ~ def
-       /pdf.tmpa ~ exch ~ def ~
-       pdf.dest.x ~ pdf.tmpa ~ mul ~
-         pdf.dest.y ~ pdf.tmpc ~ mul ~ add ~
-         pdf.dev.x ~ add ~
-       pdf.dest.x ~ pdf.tmpb ~ mul ~
-         pdf.dest.y ~ pdf.tmpd ~ mul ~ add ~
-         pdf.dev.y ~ add
-     }
-       def
-  }
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.bordertracking ~ false ~ def
-    /pdf.bordertracking.begin
-      {
-        SDict ~ /pdf.bordertracking ~ true ~ put ~
-        SDict ~ /pdf.leftboundary ~ undef ~
-        SDict ~ /pdf.rightboundary ~ undef ~
-        /a ~ where
-          {
-            /a
-              {
-                currentpoint ~ pop ~
-                SDict /pdf.rightboundary ~ known ~ dup
-                  {
-                    SDict /pdf.rightboundary ~ get ~ 2 ~ index ~ lt
-                      { not }
-                    if
-                  }
-                if
-                  { pop }
-                  { SDict ~ exch /pdf.rightboundary ~ exch ~ put }
-                ifelse ~
-                moveto ~
-                currentpoint ~ pop ~
-                SDict /pdf.leftboundary ~ known ~ dup
-                  {
-                    SDict /pdf.leftboundary ~ get ~ 2 ~ index ~ gt
-                      { not }
-                    if
-                  }
-                if
-                  { pop }
-                  { SDict ~ exch /pdf.leftboundary ~ exch ~ put }
-                ifelse
-              }
-            put
-          }
-        if
-      }
-        def
-    /pdf.bordertracking.end
-      {
-        /a ~ where { /a { moveto } put } if
-        /x ~ where { /x { 0 ~ exch ~ rmoveto } put } if ~
-        SDict /pdf.leftboundary ~ known
-          { pdf.outerbox ~ 0 ~ pdf.leftboundary ~ put }
-        if ~
-        SDict /pdf.rightboundary ~ known
-          { pdf.outerbox ~ 2 ~ pdf.rightboundary ~ put }
-        if ~
-        SDict /pdf.bordertracking ~ false ~ put
-      }
-        def
-  /pdf.bordertracking.endpage
-    {
-      pdf.bordertracking
-        {
-          pdf.bordertracking.end ~
-          true ~ setglobal ~
-          pdf.globaldict
-            /pdf.brokenlink.rect [ pdf.outerbox ~ aload ~ pop ] put ~
-          pdf.globaldict
-            /pdf.brokenlink.skip ~ pdf.baselineskip ~ put ~
-          pdf.globaldict
-            /pdf.brokenlink.dict ~
-              pdf.link.dict ~ pdf.cvs ~ put ~
-          false ~ setglobal ~
-          mark ~ pdf.link.dict ~ cvx ~ exec ~ /Rect
-            [
-              pdf.llx ~
-              pdf.lly ~
-              pdf.outerbox ~ 2 ~ get ~ pdf.linkmargin ~ add ~
-              currentpoint ~ exch ~ pop ~
-              pdf.outerbox ~ pdf.rect.ht ~ sub ~ pdf.linkmargin ~ sub
-            ]
-          /ANN ~ pdf.pdfmark
-        }
-      if
-    }
-      def
-    /pdf.bordertracking.continue
-      {
-        /pdf.link.dict ~ pdf.globaldict
-          /pdf.brokenlink.dict ~ get ~ def
-        /pdf.outerbox ~ pdf.globaldict
-          /pdf.brokenlink.rect ~ get ~ def
-        /pdf.baselineskip ~ pdf.globaldict
-          /pdf.brokenlink.skip ~ get ~ def ~
-        pdf.globaldict ~ dup ~ dup
-        /pdf.brokenlink.dict ~ undef
-        /pdf.brokenlink.skip ~ undef
-        /pdf.brokenlink.rect ~ undef ~
-        currentpoint
-        /pdf.originy ~ exch ~ def
-        /pdf.originx ~ exch ~ def
-        /a ~ where
-          {
-            /a
-              {
-                moveto ~
-                SDict ~
-                begin ~
-                currentpoint ~ pdf.originy ~ ne ~ exch ~
-                  pdf.originx ~ ne ~ or
-                  {
-                    pdf.save.linkll
-                    /pdf.lly ~
-                      pdf.lly ~ pdf.outerbox ~ 1 ~ get ~ sub ~ def ~
-                    pdf.bordertracking.begin
-                  }
-                if ~
-                end
-              }
-            put
-          }
-        if
-        /x ~ where
-          {
-            /x
-              {
-                0 ~ exch ~ rmoveto ~
-                SDict~
-                begin ~
-                currentpoint ~
-                pdf.originy ~ ne ~ exch ~ pdf.originx ~ ne ~ or
-                  {
-                    pdf.save.linkll
-                    /pdf.lly ~
-                      pdf.lly ~ pdf.outerbox ~ 1 ~ get ~ sub ~ def ~
-                    pdf.bordertracking.begin
-                  }
-                if ~
-                end
-              }
-            put
-          }
-        if
-      }
-        def
-  }
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.breaklink
-      {
-        pop ~
-        counttomark ~ 2 ~ mod ~ 0 ~ eq
-          {
-            counttomark /pdf.count ~ exch ~ def
-              {
-               pdf.count ~ 0 ~ eq { exit } if ~
-               counttomark ~ 2 ~ roll ~
-               1 ~ index ~ /Rect ~ eq
-                 {
-                   dup ~ 4 ~ array ~ copy ~
-                   dup ~ dup ~
-                     1 ~ get ~
-                     pdf.outerbox ~ pdf.rect.ht ~
-                     pdf.linkmargin ~ 2 ~ mul ~ add ~ sub ~
-                     3 ~ exch ~ put ~
-                   dup ~
-                     pdf.outerbox ~ 2 ~ get ~
-                     pdf.linkmargin ~ add ~
-                     2 ~ exch ~ put ~
-                   dup ~ dup ~
-                     3 ~ get ~
-                     pdf.outerbox ~ pdf.rect.ht ~
-                     pdf.linkmargin ~ 2 ~ mul ~ add ~ add ~
-                     1 ~ exch ~ put
-                   /pdf.currentrect ~ exch ~  def ~
-                   pdf.breaklink.write
-                     {
-                       pdf.currentrect ~
-                       dup ~
-                         pdf.outerbox ~ 0 ~ get ~
-                         pdf.linkmargin ~ sub ~
-                         0 ~ exch ~ put ~
-                       dup ~
-                         pdf.outerbox ~ 2 ~ get ~
-                         pdf.linkmargin ~ add ~
-                         2 ~ exch ~ put ~
-                       dup ~ dup ~
-                         1 ~ get ~
-                         pdf.baselineskip ~ add ~
-                         1 ~ exch ~ put ~
-                       dup ~ dup ~
-                         3 ~ get ~
-                         pdf.baselineskip ~ add ~
-                         3 ~ exch ~ put ~
-                       /pdf.currentrect ~ exch ~ def ~
-                       pdf.breaklink.write
-                      }
-                    1 ~ index ~ 3 ~ get ~
-                    pdf.linkmargin ~ 2 ~ mul ~ add ~
-                    pdf.outerbox ~ pdf.rect.ht ~ add ~
-                    2 ~ index ~ 1 ~ get ~ sub ~
-                    pdf.baselineskip ~ div ~ round ~ cvi ~ 1 ~ sub ~
-                    exch ~
-                  repeat ~
-                  pdf.currentrect ~
-                  dup ~
-                    pdf.outerbox ~ 0 ~ get ~
-                    pdf.linkmargin ~ sub ~
-                    0 ~ exch ~ put ~
-                  dup ~ dup ~
-                    1 ~ get ~
-                    pdf.baselineskip ~ add ~
-                    1 ~ exch ~ put ~
-                  dup ~ dup ~
-                    3 ~ get ~
-                    pdf.baselineskip ~ add ~
-                    3 ~ exch ~ put ~
-                  dup ~ 2 ~ index ~ 2 ~ get ~  2 ~ exch ~ put
-                  /pdf.currentrect ~ exch ~ def ~
-                  pdf.breaklink.write ~
-                  SDict /pdf.pdfmark.good ~ false ~ put ~
-                  exit
-                }
-                { pdf.count ~ 2 ~ sub /pdf.count ~ exch ~ def }
-              ifelse
-            }
-          loop
-        }
-      if
-      /ANN
-    }
-      def
-    /pdf.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 ~ pdf.currentrect
-        /ANN ~ pdfmark
-      }
-        def
-  }
-\__kernel_backend_postscript_header:n
-  {
-    /pdf.pdfmark
-      {
-        SDict /pdf.pdfmark.good ~ true ~ put ~
-        dup /ANN ~ eq
-          {
-            pdf.pdfmark.store ~
-            pdf.pdfmark.dict ~
-              begin ~
-                Subtype /Link ~ eq ~
-                currentdict /Rect ~ known ~ and ~
-                SDict /pdf.outerbox ~ known ~ and ~
-                SDict /pdf.baselineskip ~ known ~ and ~
-                  {
-                    Rect ~ 3 ~ get ~
-                    pdf.linkmargin ~ 2 ~ mul ~ add ~
-                    pdf.outerbox ~ pdf.rect.ht ~ add ~
-                    Rect ~ 1 ~ get ~ sub ~
-                    pdf.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt
-                      { pdf.breaklink }
-                    if
-                  }
-                if ~
-              end ~
-            SDict /pdf.outerbox ~ undef ~
-            SDict /pdf.baselineskip ~ undef ~
-            currentdict /pdf.pdfmark.dict ~ undef ~
-          }
-        if ~
-        pdf.pdfmark.good
-          { pdfmark }
-          { cleartomark }
-        ifelse
-      }
-        def
-    /pdf.pdfmark.store
-      {
-        /pdf.pdfmark.dict ~ 65534 ~ dict ~ def ~
-        counttomark ~ 1 ~ add ~ copy ~
-        pop
-          {
-            dup ~ mark ~ eq
-              {
-                pop ~
-                exit
-              }
-              {
-                pdf.pdfmark.dict ~
-                begin ~ def ~ end
-              }
-            ifelse
-          }
-        loop
-    }
-      def
-  }
 \box_new:N \l__pdf_backend_content_box
 \box_new:N \l__pdf_backend_model_box
 \int_new:N \g__pdf_backend_annotation_int



More information about the tex-live-commits mailing list