[latex3-commits] [git/LaTeX3-latex3-latex3] master: Move dvips header info to .pro file (112ae3d8c)

Joseph Wright joseph.wright at morningstar2.co.uk
Mon Nov 25 22:58:53 CET 2019


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/112ae3d8ce95352047c6de101b9d14434ae4e027

>---------------------------------------------------------------

commit 112ae3d8ce95352047c6de101b9d14434ae4e027
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Mon Nov 25 21:58:53 2019 +0000

    Move dvips header info to .pro file


>---------------------------------------------------------------

112ae3d8ce95352047c6de101b9d14434ae4e027
 l3backend/CHANGELOG.md         |   3 +
 l3backend/build.lua            |   5 +-
 l3backend/l3backend-basics.dtx |  24 +-
 l3backend/l3backend-code.tex   |   3 +-
 l3backend/l3backend-pdf.dtx    | 529 -----------------------------------------
 l3backend/l3backend.ins        |   4 +
 6 files changed, 20 insertions(+), 548 deletions(-)

diff --git a/l3backend/CHANGELOG.md b/l3backend/CHANGELOG.md
index f1dae742e..0cfdaa21b 100644
--- a/l3backend/CHANGELOG.md
+++ b/l3backend/CHANGELOG.md
@@ -6,6 +6,9 @@ this project uses date-based 'snapshot' version identifiers.
 
 ## [Unreleased]
 
+### Changed
+- Move dvips header material to `.pro` file
+
 ## [2019-10-11]
 
 ### Changed
diff --git a/l3backend/build.lua b/l3backend/build.lua
index 2d42aea4e..e3aeade3a 100644
--- a/l3backend/build.lua
+++ b/l3backend/build.lua
@@ -9,7 +9,7 @@ bundle = ""
 -- Location of main directory: use Unix-style path separators
 maindir = ".."
 
-installfiles = {"*.def"}
+installfiles = {"*.def", "*.pro"}
 sourcefiles  = {"*.dtx", "*.ins"}
 tagfiles     = {"*.dtx", "CHANGELOG.md", "README.md"}
 typesetfiles = {"l3backend-code.tex"}
@@ -23,6 +23,9 @@ unpacksuppfiles = {"/support/docstrip.tex","/l3kernel/l3docstrip.dtx"}
 unpackdeps  = { }
 typesetdeps = {maindir .. "/l3packages/xparse"}
 
+-- Get the .pro files in the right place
+tdslocations = {"dvips/l3backend/*.pro"}
+
 -- Load the common build code
 dofile(maindir .. "/build-config.lua")
 
diff --git a/l3backend/l3backend-basics.dtx b/l3backend/l3backend-basics.dtx
index 3bb240f1e..8d2a801c7 100644
--- a/l3backend/l3backend-basics.dtx
+++ b/l3backend/l3backend-basics.dtx
@@ -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}
 %   {
diff --git a/l3backend/l3backend-code.tex b/l3backend/l3backend-code.tex
index 62a6bf5e2..55dce66e1 100644
--- a/l3backend/l3backend-code.tex
+++ b/l3backend/l3backend-code.tex
@@ -43,7 +43,8 @@ for those people who are interested.
     l3backend-color.dtx    ,
     l3backend-draw.dtx     ,
     l3backend-graphics.dtx ,
-    l3backend-pdf.dtx
+    l3backend-pdf.dtx      ,
+    l3backend-header.dtx
   }
 \ExplSyntaxOff
 
diff --git a/l3backend/l3backend-pdf.dtx b/l3backend/l3backend-pdf.dtx
index 832b835c1..d834d195b 100644
--- a/l3backend/l3backend-pdf.dtx
+++ b/l3backend/l3backend-pdf.dtx
@@ -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}
diff --git a/l3backend/l3backend.ins b/l3backend/l3backend.ins
index 149f08b9e..1a92aade1 100644
--- a/l3backend/l3backend.ins
+++ b/l3backend/l3backend.ins
@@ -77,6 +77,10 @@ and all files in that bundle must be distributed together.
         \from{l3backend-graphics.dtx}{package,dvips}
         \from{l3backend-pdf.dtx}     {package,dvips}
       }
+    \file{l3backend-dvips.pro}
+      {
+        \from{l3backend-header.dtx}  {header,dvips}
+      }
   }
 \generate
   {





More information about the latex3-commits mailing list