summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-05-15 22:11:11 +0000
committerKarl Berry <karl@freefriends.org>2016-05-15 22:11:11 +0000
commit48121dcc91b2cbbccc5bbfbb1cc9c60ca2a695b2 (patch)
tree90f8a31739bf5ebe5437a43867fa9b17f751668d /Master
parent5f70b2c1fb388056ec31bb162ff177ff3b7b49fa (diff)
l3 (15may16)
git-svn-id: svn://tug.org/texlive/trunk@41163 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdfbin376893 -> 377518 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdfbin319719 -> 320347 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdfbin455665 -> 456282 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdfbin448143 -> 448143 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdfbin379623 -> 379623 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdfbin352404 -> 352404 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdfbin384826 -> 385409 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdfbin395295 -> 395295 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdfbin396698 -> 398088 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdfbin291807 -> 291807 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin586195 -> 586851 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1499684 -> 1497931 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin268234 -> 268234 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin276800 -> 276800 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin220220 -> 220220 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin4702602 -> 4715525 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdfbin333230 -> 333916 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdfbin478100 -> 478711 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdfbin460225 -> 460853 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdfbin422289 -> 422903 bytes
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx80
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx22
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3.ins1
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx45
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx900
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3format.ins2
-rw-r--r--Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx8
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty50
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex19
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty22
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def90
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvips.def55
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def163
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def116
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def105
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty8
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty8
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty8
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty8
55 files changed, 1205 insertions, 593 deletions
diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md
index 259cf2169e6..927427b8aa8 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/README.md
+++ b/Master/texmf-dist/doc/latex/l3experimental/README.md
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================
-Release 2016/04/20 (r6476)
+Release 2016/05/14 (r6495)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf
index 1013e668419..3ba770b9da1 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf
index 086614c6818..fc420706a87 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf
index 9498a272f59..ec88c77414a 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
index d8ccaf8617e..5fd19d24b6e 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
index 2317400a6e1..5f475cc59b0 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf
index 269302d2052..1b9ca2c2433 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf
index 50ceae34ef7..181d0e5efce 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
index 3c5d08fde58..faa127772bd 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
index b8efaf93486..b7eb5fa0d60 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
index e3aab346492..3e623236a5f 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md
index ac4de7aeac8..25e6a44ac9c 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/README.md
+++ b/Master/texmf-dist/doc/latex/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2016/04/20 (r6476)
+Release 2016/05/14 (r6495)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
index 2d85a91eb70..c0e1d335d8f 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
index 63dcee7e040..3dcd7c27547 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
index 2c8fdec0843..10491b0522b 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
index e46520e6673..f2c59837d83 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index e88a95bff58..41c74f92ecc 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index f0532f99a35..09b7db7d07d 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/README.md b/Master/texmf-dist/doc/latex/l3packages/README.md
index de51f867acf..0dec406f979 100644
--- a/Master/texmf-dist/doc/latex/l3packages/README.md
+++ b/Master/texmf-dist/doc/latex/l3packages/README.md
@@ -1,7 +1,7 @@
LaTeX3 High-Level Concepts
==========================
-Release 2016/04/20 (r6476)
+Release 2016/05/14 (r6495)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
index 379617d1bd2..45f20095b4d 100644
--- a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
index 35cca2226b5..1687578333a 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
index 7b594c7abaf..22ab446a8b8 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
index 62bbbe2abfe..13f007b15c6 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
index 2dbc55d8f01..c6a0962d867 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
@@ -37,8 +37,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3sort}{Support package l3kernel too old}
@@ -50,7 +50,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3sort.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3sort.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental sorting functions}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
index 016b1191bee..d929259efaa 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
@@ -36,8 +36,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3flag}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3flag.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3flag.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental flags}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
index 470ee3ad4e3..e9fc42c8cf2 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
@@ -36,8 +36,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3regex}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3regex.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3regex.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental regular expressions}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
index 2d87c600ef9..db33b260adc 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
@@ -36,8 +36,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3tl-build}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3tl-build.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3tl-build.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental token list construction}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
index 5e8185bd7b2..a35de8f7643 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
@@ -38,8 +38,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3galley}{Support package l3kernel too old}
@@ -51,7 +51,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3galley.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3galley.dtx 6493 2016-05-14 21:08:13Z joseph $
{L3 Experimental galley code}
%</driver|package>
%<*driver>
@@ -227,20 +227,29 @@
% \begin{function}{\galley_penalty_set_single:n}
% \begin{syntax}
% \cs{galley_penalty_set_single:n} \Arg{penalty}
+% \cs{galley_penalty_add_single:n} \Arg{penalty}
% \end{syntax}
% Sets the \meta{penalty} for a break between the current and next
% paragraph on a one-off basis. This function is intended for user-level
% adjustments to design, and takes precedent over both settings from
% \cs{l_galley_interpar_penalty_int} and from \cs{galley_no_break_next:}.
+% The \texttt{add} variant adds the penalty to any existing values.
% \end{function}
%
-% \begin{function}{\galley_vspace_set_single:n}
+% \begin{function}
+% {
+% \galley_vspace_set_single:n ,
+% \galley_vspace_add_single:n ,
+% \galley_vspace_max_single:n
+% }
% \begin{syntax}
% \cs{galley_vspace_set_single:n} \Arg{space}
% \end{syntax}
% Sets the \meta{space} to be inserted between the current and next
% paragraph on a one-off basis. This function is intended for user-level
-% adjustments to design.
+% adjustments to design. The \texttt{add} and \texttt{max} variants add
+% to the existing spacing and set to the maximum of the existing value
+% and the argument, respectively.
% \end{function}
%
% \subsection{Paragraph shape}
@@ -909,7 +918,6 @@
\int_new:N \l_@@_current_par_lines_int
% \end{macrocode}
% \end{variable}
-% \end{variable}
%
% \begin{variable}{\g_galley_restore_running_tl, \l_@@_restore_running_tl}
% When a parameter is altered from the \enquote{running} value to a
@@ -1249,7 +1257,6 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \begin{macro}{\galley_par:n}
% Inserts tokens such that they are appended to the end of the last
@@ -1767,8 +1774,6 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
% \subsection{Setting the primitive paragraph shape}
%
@@ -1962,11 +1967,17 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \subsection{Between paragraphs}
%
-% \begin{macro}{\galley_penalty_set_single:n, \galley_vspace_set_single:n}
+% \begin{macro}
+% {
+% \galley_penalty_set_single:n,
+% \galley_penalty_add_single:n,
+% \galley_vspace_set_single:n,
+% \galley_vspace_add_single:n,
+% \galley_vspace_max_single:n
+% }
% User supplied penalties and spaces only apply for a single paragraph.
% In both cases, the input values need to be checked for the correct
% form but are stored as token lists. The \texttt{x}-type expansion
@@ -1974,10 +1985,46 @@
% \begin{macrocode}
\cs_new_protected:Npn \galley_penalty_set_single:n #1
{ \tl_gset:Nx \g_@@_interpar_penalty_user_tl { \int_eval:n {#1} } }
+\cs_new_protected:Npn \galley_penalty_add_single:n #1
+ {
+ \tl_gset:Nx \g_@@_interpar_penalty_user_tl
+ {
+ \int_eval:n
+ {
+ \tl_if_empty:NF \g_@@_interpar_penalty_user_tl
+ { \g_@@_interpar_penalty_user_tl + }
+ #1
+ }
+ }
+ }
\cs_new_protected:Npn \galley_vspace_set_single:n #1
{ \tl_gset:Nx \g_@@_interpar_vspace_user_tl { \skip_eval:n {#1} } }
+\cs_new_protected:Npn \galley_vspace_add_single:n #1
+ {
+ \tl_gset:Nx \g_@@_interpar_vspace_user_tl
+ {
+ \skip_eval:n
+ {
+ \tl_if_empty:NF \g_@@_interpar_vspace_user_tl
+ { \g_@@_interpar_vspace_user_tl + }
+ #1
+ }
+ }
+ }
+\cs_new_protected:Npn \galley_vspace_max_single:n #1
+ {
+ \tl_if_empty:NTF \g_@@_interpar_vspace_user_tl
+ { \galley_vspace_set_single:n {#1} }
+ {
+ \dim_compare:nNnT
+ { \etex_glueexpr:D \g_@@_interpar_vspace_user_tl }
+ < { \etex_glueexpr:D #1 \scan_stop: }
+ { \galley_vspace_set_single:n {#1} }
+ }
+ }
% \end{macrocode}
% \end{macro}
+%
%
% \begin{macro}{\parskip}
% For the package, the \cs{parskip} primitive is moved out of the
@@ -2472,9 +2519,6 @@
}
}
\newpage
- \tl_gput_right:Nn \g_galley_whatsit_next_tl
- { \iow_shipout:Nx \c_minus_one { } }
- \tex_vbox:D { }
\galley_penalty_set_single:n { -\@Mi }
}
% \end{macrocode}
@@ -2503,14 +2547,14 @@
% \begin{macrocode}
% At present we don't have a proper handling for the starred version
% of \tn{vspace}: just ignore it for the moment!
-% \end{macrocode}
+% \begin{macrocode}
\DeclareRobustCommand \vspace
{
\@ifstar
\@vspace
\@vspace
}
-\cs_set:Npn \@vspace #1 { \galley_vspace_set_single:n {#1} }
+\cs_set:Npn \@vspace #1 { \galley_vspace_add_single:n {#1} }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2558,8 +2602,8 @@
% \begin{macro}{\addpenalty, \addvspace}
% The mechanism here is entirely different, but at least this works!
% \begin{macrocode}
-\cs_set_nopar:Npn \addpenalty { \galley_penalty_set_single:n }
-\cs_set_nopar:Npn \addvspace { \galley_vspace_set_single:n }
+\cs_set_nopar:Npn \addpenalty { \galley_penalty_add_single:n }
+\cs_set_nopar:Npn \addvspace { \galley_vspace_max_single:n }
% \end{macrocode}
%\end{macro}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index 27394c1d22e..165d2dc1762 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -36,8 +36,8 @@
%<*driver|generic|package>
\def\ExplFileName{expl3}%
\def\ExplFileDescription{L3 programming layer}%
-\def\ExplFileDate{2016/04/20}%
-\def\ExplFileVersion{6476}%
+\def\ExplFileDate{2016/05/14}%
+\def\ExplFileVersion{6495}%
%</driver|generic|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -1364,6 +1364,24 @@
}
}
},
+ driver / dvisvgm .code:n =
+ {
+ \tl_set:Nn \l__expl_driver_tl { dvisvgm }
+ \sys_if_engine_xetex:TF
+ {
+ \__msg_kernel_error:nnnn { expl } { wrong-driver }
+ { dvips } { xdvipdfmx }
+ \tl_set:Nn \l__expl_driver_tl { xdvipdfmx }
+ }
+ {
+ \sys_if_output_pdf:T
+ {
+ \__msg_kernel_error:nnnn { expl } { wrong-driver }
+ { dvips } { pdfmode }
+ \tl_set:Nn \l__expl_driver_tl { pdfmode }
+ }
+ }
+ },
driver / latex2e .code:n =
{ \tl_set:Nn \l__expl_driver_tl { latex2e } },
driver / pdfmode .code:n =
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins
index cc4108ba0dc..c1d041943b0 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3.ins
+++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins
@@ -90,6 +90,7 @@ Do not distribute a modified version of this file.
\generate{\file{l3dvipdfmx.def} {\from{l3drivers.dtx} {package,dvipdfmx} }}
\generate{\file{l3dvips.def} {\from{l3drivers.dtx} {package,dvips} }}
+\generate{\file{l3dvisvgm.def} {\from{l3drivers.dtx} {package,dvisvgm} }}
\generate{\file{l3pdfmode.def} {\from{l3drivers.dtx} {package,pdfmode} }}
\generate{\file{l3xdvipdfmx.def} {\from{l3drivers.dtx} {package,xdvipdfmx}}}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index d3432d6ba07..e98af99edcb 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -38,7 +38,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3candidates.dtx 6456 2016-03-25 21:09:37Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 6484 2016-05-13 19:08:30Z joseph $
{L3 Experimental additions to l3kernel}
%</driver|package>
%<*driver>
@@ -299,36 +299,6 @@
% group level.
% \end{function}
%
-% \subsection{Internal variables}
-%
-% \begin{variable}{\l__box_angle_fp}
-% The angle through which a box is rotated by \cs{box_rotate:Nn}, given in
-% degrees counter-clockwise. This value is required by the underlying
-% driver code in \pkg{l3driver} to carry out the driver-dependent part
-% of box rotation.
-% \end{variable}
-%
-% \begin{variable}{\l__box_cos_fp, \l__box_sin_fp}
-% The sine and cosine of the angle through which a box is rotated by
-% \cs{box_rotate:Nn}: the values refer to the angle counter-clockwise. These
-% values are required by the underlying driver code in \pkg{l3driver} to
-% carry out the driver-dependent part of box rotation.
-% \end{variable}
-%
-% \begin{variable}{\l__box_scale_x_fp, \l__box_scale_y_fp}
-% The scaling factors by which a box is scaled by \cs{box_scale:Nnn}
-% or \cs{box_resize:Nnn}. These values are required by the underlying
-% driver code in \pkg{l3driver} to carry out the driver-dependent part
-% of box rotation.
-% \end{variable}
-%
-% \begin{variable}{\l__box_internal_box}
-% Box used for affine transformations, which is used to contain rotated
-% material when applying \cs{box_rotate:Nn}. This box must be correctly
-% constructed for the driver-dependent code in \pkg{l3driver} to function
-% correctly.
-% \end{variable}
-%
% \section{Additions to \pkg{l3clist}}
%
% \begin{function}[added = 2014-08-22]{\clist_log:N, \clist_log:c}
@@ -1316,9 +1286,9 @@
\tex_kern:D -\l_@@_left_new_dim
\hbox:n
{
- \__driver_box_rotate_begin:
- \box_use:N \l_@@_internal_box
- \__driver_box_rotate_end:
+ \__driver_box_use_rotate:Nn
+ \l_@@_internal_box
+ \l_@@_angle_fp
}
}
% \end{macrocode}
@@ -1626,9 +1596,10 @@
{
\hbox_set:Nn \l_@@_internal_box
{
- \__driver_box_scale_begin:
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_box_scale_end:
+ \__driver_box_use_scale:Nnn
+ #1
+ \l_@@_scale_x_fp
+ \l_@@_scale_y_fp
}
% \end{macrocode}
% The new height and depth can be applied directly.
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
index a3569329cd5..24252e7ae45 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
@@ -38,7 +38,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3drivers.dtx 6472 2016-04-05 13:26:17Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 6494 2016-05-14 21:10:56Z joseph $
{L3 Experimental drivers}
%</driver|package>
%<*driver>
@@ -81,14 +81,16 @@
% conjugation with \pdfTeX{} or \LuaTeX{} in DVI mode.
% \item \texttt{dvipdfmx}: The \texttt{dvipdfmx} program, which works in
% conjugation with \pdfTeX{} or \LuaTeX{} in DVI mode.
+% \item \texttt{dvisvgm}: The \texttt{dvisvgm} program, which works in
+% conjugation with \pdfTeX{} or \LuaTeX{} in DVI mode to create SVG
+% output.
% \item \texttt{xdvipdfmx}: The driver used by \XeTeX{}.
% \end{itemize}
%
% The code here is all very low-level, and should not in general be used
% outside of the kernel. It is also important to note that many of the
-% functions here are closely tied to the immediate level \enquote{up}:
-% several variable values must be in the correct locations for the driver
-% code to function.
+% functions here are closely tied to the immediate level \enquote{up},
+% and they must be used in the correct contexts.d
%
% \section{Box clipping}
%
@@ -107,36 +109,34 @@
%
% \section{Box rotation and scaling}
%
-% \begin{function}[added = 2011-09-01, updated = 2013-12-27]
-% {\__driver_box_rotate_begin:, \__driver_box_rotate_end:}
+% \begin{function}[added = 2016-05-12]{\__driver_box_use_rotate:Nn}
% \begin{syntax}
-% \cs{__driver_box_rotate_begin:}
-% \cs{box_use:N} \cs{l__box_internal_box}
-% \cs{__driver_box_rotate_end:}
+% \cs{__driver_box_use_rotate:Nn} \meta{box} \Arg{angle}
% \end{syntax}
-% Rotates the \meta{box material} anti-clockwise around the current
-% insertion point. The angle of rotation (in degrees counter-clockwise)
-% and the sine and cosine of this angle should be stored in
-% \cs{l__box_angle_fp}, \cs{l__box_sin_fp} and \cs{l__box_cos_fp},
-% respectively. Typically, the box material inserted between the beginning
-% and end markers will be stored in \cs{l__box_internal_box}: this fact is
-% required by some drivers to obtain the correct output.
+% Inserts the content of the \meta{box} at the current insertion point
+% rotated by the \meta{angle} (expressed in degrees). The material is
+% inserted with no apparent height or width, and is rotated such the
+% the \TeX{} reference point of the box is the center of rotation and
+% remains the reference point after rotation. It is the responsibly of
+% the code using this function to adjust the apparent size of the box to
+% be correct at the \TeX{} side.
+%
+% This function should only be used within a surrounding horizontal
+% box construct.
% \end{function}
%
-% \begin{function}[added = 2011-09-02, updated = 2013-12-27]
-% {\__driver_box_scale_begin:, \__driver_box_scale_end:}
+% \begin{function}[added = 2016-05-12]{\__driver_box_use_scale:Nnn}
% \begin{syntax}
-% \cs{__driver_box_scale_begin:}
-% \meta{box material}
-% \cs{__driver_box_scale_end:}
+% \cs{__driver_box_use_scale:Nnn} \meta{box} \Arg{x-scale} \Arg{y-scale}
% \end{syntax}
-% Scales the \meta{box material} (which should be either a \cs{box_use:N}
-% or \cs{hbox:n} construct). The \meta{box material} is scaled by the values
-% stored in \cs{l__box_scale_x_fp} and \cs{l__box_scale_y_fp} in the
-% horizontal and vertical directions, respectively. This function is
-% also reused when resizing boxes: at a driver level, only scalings are
-% supported and so the higher-level code must convert the absolute sizes
-% to scale factors.
+% Inserts the content of the \meta{box} at the current insertion point
+% scale by the \meta{x-scale} and \meta{y-scale}. The material is
+% inserted with no apparent height or width. It is the responsibly of
+% the code using this function to adjust the apparent size of the box to
+% be correct at the \TeX{} side.
+%
+% This function should only be used within a surrounding horizontal
+% box construct.
% \end{function}
%
% \section{Color support}
@@ -164,6 +164,14 @@
%<@@=driver>
% \end{macrocode}
%
+% Whilst there is a reasonable amount of code overlap between drivers,
+% it is much clearer to have the blocks more-or-less separated than run
+% in together and DocStripped out in parts. As such, most of the following
+% is set up on a per-driver basis, though there is some common code (again
+% given in blocks not interspersed with other material).
+%
+% All the file identifiers are up-front so that they come out in the right
+% place in the files.
% \begin{macrocode}
%<*package>
\ProvidesExplFile
@@ -175,6 +183,10 @@
{l3dvips.def}{\ExplFileDate}{\ExplFileVersion}
{L3 Experimental driver: dvips}
%</dvips>
+%<*dvisvgm>
+ {l3dvisvgm.def}{\ExplFileDate}{\ExplFileVersion}
+ {L3 Experimental driver: dvisvgm}
+%</dvisvgm>
%<*pdfmode>
{l3pdfmode.def}{\ExplFileDate}{\ExplFileVersion}
{L3 Experimental driver: PDF mode}
@@ -186,110 +198,361 @@
%</package>
% \end{macrocode}
%
-% \subsection{Settings for direct PDF output}
+% \subsection{\texttt{pdfmode} driver}
%
-% If the driver loaded is \texttt{pdfmode} then direct PDF output is required.
-% (This may of course alter: it might be that the driver is picked based on the
-% value of \cs{pdftex_pdfoutput:D}.)
% \begin{macrocode}
-%<*initex>
%<*pdfmode>
-\pdftex_pdfoutput:D = 1 \scan_stop:
-%</pdfmode>
-%</initex>
% \end{macrocode}
%
-% Set up the driver for direct PDF output to set the PDF origin equal to
-% \TeX{}'s standard origin. The other settings make use of PDF~$1.5$, which
-% is standard in \TeX{} Live 2011 and should be a reasonable baseline for
-% the future.
+% The direct PDF driver covers both \pdfTeX{} and \LuaTeX{}. The latter
+% renames/restructures the driver primitives but this can be handled
+% at one level of abstraction. As such, we avoid using two separate drivers
+% for this material at the cost of some \texttt{x}-type definitions to get
+% everything expanded up-front.
+%
+% \subsubsection{Basics}
+%
+% \begin{macro}[int]{\@@_literal:n}
+% This is equivalent to \verb|\special{pdf:}| but the engine can
+% track it. Without the \texttt{direct} keyword everything is kept in
+% sync: the transformation matrix is set to the current point automatically.
+% Note that this is still inside the text (\texttt{BT} \dots \texttt{ET}
+% block).
% \begin{macrocode}
-%<*initex>
-%<*pdfmode>
-\group_begin:
- \cs_set_proteced:Npx \@@_tmp:w #1 =
- {
- \tex_global:D
- \cs_if_exist:NTF \luatex_pdfvariable:D
- { \exp_not:N \luatex_pdfvariable:D #1 }
- { \exp_not:c { pdftex_pdf #1 :D } }
- =
- }
- \@@_tmp:w horigin = 1 true in \scan_stop:
- \@@_tmp:w vorigin = 1 true in \scan_stop:
- \@@_tmp:w decimaldigits = 3 \scan_stop:
- \@@_tmp:w pkresolution = 600 \scan_stop:
- \@@_tmp:w minorversion = 5 \scan_stop:
- \@@_tmp:w compresslevel = 9 \scan_stop:
- \@@_tmp:w objcompresslevel = 2 \scan_stop:
-\group_end:
-%</pdfmode>
-%</initex>
+\cs_new_protected:Npx \@@_literal:n #1
+ {
+ \cs_if_exist:NTF \luatex_pdfextension:D
+ { \luatex_pdfextension:D literal }
+ { \pdftex_pdfliteral:D }
+ {#1}
+ }
% \end{macrocode}
+% \end{macro}
%
-% \subsection{Driver utility functions}
-%
-% \begin{macro}{\@@_state_save:, \@@_state_restore:}
-% All of the drivers have a stack for saving the graphic state. These
-% have slightly different interfaces. For both \texttt{dvips} and
-% \texttt{(x)dvipdfmx} this is done using an appropriate special. Note
-% that here and later, the \texttt{dvipdfmx} documentation does not cover
-% the |literal| key word but that this appears to behave in the same way as
-% \pdfTeX{}'s \tn{pdfliteral} (making life easier all-round). For \pdfTeX{}
-% in direct PDF output mode there is a dedicated primitive. \LuaTeX{} is
-% almost the same but with newer versions there is a compatibly step
+% \begin{macro}[int]{\@@_scope_begin:, \@@_scope_end:}
+% Higher-level interfaces for saving and restoring the graphic state.
% \begin{macrocode}
-\cs_new_protected_nopar:Npx \@@_state_save:
-%<*dvips>
- { \tex_special:D { ps:gsave } }
-%</dvips>
-%<*dvipdfmx|xdvipdfmx>
- { \tex_special:D { pdf:literal~q } }
-%</dvipdfmx|xdvipdfmx>
-%<*pdfmode>
+\cs_new_protected_nopar:Npx \@@_scope_begin:
{
\cs_if_exist:NTF \luatex_pdfextension:D
{ \luatex_pdfextension:D save \scan_stop: }
{ \pdftex_pdfsave:D }
}
-%</pdfmode>
-\cs_new_protected_nopar:Npx \@@_state_restore:
-%<*dvips>
- { \tex_special:D { ps:grestore } }
-%</dvips>
-%<*dvipdfmx|xdvipdfmx>
- { \tex_special:D { pdf:literal~Q } }
-%</dvipdfmx|xdvipdfmx>
-%<*pdfmode>
+\cs_new_protected_nopar:Npx \@@_scope_end:
{
\cs_if_exist:NTF \luatex_pdfextension:D
{ \luatex_pdfextension:D restore \scan_stop: }
{ \pdftex_pdfrestore:D }
}
-%</pdfmode>
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[int]{\@@_literal:n}
-% The driver code needs to pass on a lot of \enquote{raw} information to
-% the underlying binary. The exact command is driver-dependent but the
-% concept is general enough to use a single function. However, it is
-% important to remember this is a convenient shortcut: the arguments will
-% be driver-specific. Note that these functions set the transformation matrix
-% to the current position: contrast with \cs{@@_literal_direct:n}.
+% \begin{macro}[int]{\@@_matrix:n}
+% Here the appropriate function is set up to insert an affine matrix
+% into the PDF. With \pdfTeX{} and \LuaTeX{} in direct PDF output mode there
+% is a primitive for this, which only needs the rotation/scaling/skew part.
+% \begin{macrocode}
+\cs_new_protected:Npx \@@_matrix:n #1
+ {
+ \cs_if_exist:NTF \luatex_pdfextension:D
+ { \luatex_pdfextension:D setmatrix }
+ { \pdftex_pdfsetmatrix:D }
+ {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Color}
+%
+% \begin{variable}{\l_@@_current_color_tl}
+% The current color in driver-dependent format: pick up the package-mode
+% data if available.
+% \begin{macrocode}
+\tl_new:N \l_@@_current_color_tl
+\tl_set:Nn \l_@@_current_color_tl { 0~g~0~G }
+%<*package>
+\AtBeginDocument
+ {
+ \@ifpackageloaded { color }
+ { \tl_set:Nn \l_@@_current_color_tl { \current@color } }
+ { }
+ }
+%</package>
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_color_stack_int}
+% \pdfTeX{} and \LuaTeX{} have multiple stacks available, and to track
+% which one is in use a variable is required.
+% \begin{macrocode}
+\int_new:N \l_@@_color_stack_int
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[int]{\@@_color_ensure_current:}
+% \begin{macro}[aux]{\@@_color_reset:}
+% There is a dedicated primitive/primitive interface for setting colors.
+% As with scoping, this approach is not suitable for cached operations.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npx \@@_color_ensure_current:
+ {
+ \cs_if_exist:NTF \luatex_pdfextension:D
+ { \luatex_pdfextension:D colorstack }
+ { \pdftex_pdfcolorstack:D }
+ \exp_not:N \l_@@_color_stack_int push
+ { \exp_not:N \l_@@_current_color_tl }
+ \group_insert_after:N \exp_not:N \@@_color_reset:
+ }
+\cs_new_protected_nopar:Npx \@@_color_reset:
+ {
+ \cs_if_exist:NTF \luatex_pdfextension:D
+ { \luatex_pdfextension:D colorstack }
+ { \pdftex_pdfcolorstack:D }
+ \exp_not:N \l_@@_color_stack_int pop \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</pdfmode>
+% \end{macrocode}
+%
+% \subsection{\texttt{dvipdfmx} driver}
+%
% \begin{macrocode}
-\cs_new_protected:Npx \@@_literal:n #1
%<*dvipdfmx|xdvipdfmx>
+% \end{macrocode}
+%
+% The \texttt{dvipdfmx} shares code with the PDF mode one (using the common
+% section to this file) but also with \texttt{xdvipdfmx}. The latter is close
+% to identical to \texttt{dvipdfmx} and so all of the code here is extracted
+% for both drivers, with some \texttt{clean up} for \texttt{xdvipdfmx} as
+% required.
+%
+% \subsubsection{Basics}
+%
+% \begin{macro}[int]{\@@_literal:n}
+% Equivalent to \texttt{pdf:content} but favoured as the link to
+% the \pdfTeX{} primitive approach is clearer.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_literal:n #1
{ \tex_special:D { pdf:literal~ #1 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_scope_begin:, \@@_scope_end:}
+% Scoping is done using direct PDF operations here.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_scope_begin:
+ { \@@_literal:n { q } }
+\cs_new_protected_nopar:Npn \@@_scope_end:
+ { \@@_literal:n { Q } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_matrix:n}
+% With \texttt{(x)dvipdfmx} the matrix has to include a translation
+% part: that is always zero and so is built in here so that the same
+% internal interface works for all PDF-related drivers.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_matrix:n #1
+ { \@@_literal:n { #1 \c_space_tl 0~0~cm } }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Color}
+%
+% \begin{variable}{\l_@@_current_color_tl}
+% The current color in driver-dependent format.
+% \begin{macrocode}
+\tl_new:N \l_@@_current_color_tl
+\tl_set:Nn \l_@@_current_color_tl { [ 0 ] }
+%<*package>
+\AtBeginDocument
+ {
+ \@ifpackageloaded { color }
+ { \tl_set:Nn \l_@@_current_color_tl { \current@color } }
+ { }
+ }
+%</package>
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[int]{\@@_color_ensure_current:}
+% \begin{macro}[aux]{\@@_color_reset:}
+% Directly set the color using the specials with optimisation support.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npx \@@_color_ensure_current:
+ {
+ \tex_special:D { pdf:bcolor~\l_@@_current_color_tl }
+ \group_insert_after:N \exp_not:N \@@_color_reset:
+ }
+\cs_new_protected_nopar:Npx \@@_color_reset:
+ { \tex_special:D { pdf:ecolor } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
%</dvipdfmx|xdvipdfmx>
% \end{macrocode}
+%
+% \subsection{\texttt{xdvipdfmx} driver}
+%
+% \begin{macrocode}
+%<*xdvipdfmx>
+% \end{macrocode}
+%
+% \subsubsection{Color}
+%
+% \begin{macro}[int]{\@@_color_ensure_current:}
+% \begin{macro}[aux]{\@@_color_reset:}
+% The \LaTeXe{} driver uses \texttt{dvips}-like specials so there has to
+% be a change of set up if \pkg{color} is loaded.
+% \begin{macrocode}
+%<*package>
+\AtBeginDocument
+ {
+ \@ifpackageloaded { color }
+ {
+ \cs_set_protected_nopar:Npn \@@_color_ensure_current:
+ {
+ \tex_special:D { color~push~\l_@@_current_color_tl }
+ \group_insert_after:N \exp_not:N \@@_color_reset:
+ }
+
+ \cs_set_protected_nopar:Npn \@@_color_reset:
+ { \tex_special:D { color~pop } }
+ }
+ { }
+ }
+%</package>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</xdvipdfmx>
+% \end{macrocode}
+%
+% \subsection{Common code for PDF production}
+%
+% As all of the drivers which understand PDF-targeted specials act in much
+% the same way there is a lot of shared code. Rather than try to DocStrip it
+% interspersed with the above, we collect all of it here.
+%
+% \begin{macrocode}
+%<*dvipdfmx|pdfmode|xdvipdfmx>
+% \end{macrocode}
+%
+% \subsubsection{Box operations}
+%
+% \begin{macro}{\@@_box_use_clip:N}
+% The general method is to save the current location, define a clipping path
+% equivalent to the bounding box, then insert the content at the current
+% position and in a zero width box. The \enquote{real} width is then made up
+% using a horizontal skip before tidying up. There are other approaches that
+% can be taken (for example using XForm objects), but the logic here shares
+% as much code as possible and uses the same conversions (and so same
+% rounding errors) in all cases.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_box_use_clip:N #1
+ {
+ \@@_scope_begin:
+ \@@_literal:n
+ {
+ 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 } ~
+ re~W~n
+ }
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \@@_scope_end:
+ \skip_horizontal:n { \box_wd:N #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_box_use_rotate:Nn}
+% \begin{variable}{\l_@@_cos_fp, \l_@@_sin_fp}
+% Rotations are set using an affine transformation matrix which therefore
+% requires sine/cosine values not the angle itself. We store the rounded
+% values to avoid rounding twice. There are also a couple of comparisons to
+% ensure that |-0| is not written to the output, as this avoids any issues
+% with problematic display programs. Note that numbers are compared to~$0$
+% after rounding.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_box_use_rotate:Nn #1#2
+ {
+ \@@_scope_begin:
+ \box_set_wd:Nn #1 \c_zero_dim
+ \fp_set:Nn \l_@@_cos_fp { round ( cosd ( #2 ) , 5 ) }
+ \fp_compare:nNnT \l_@@_cos_fp = \c_zero_fp
+ { \fp_zero:N \l_@@_cos_fp }
+ \fp_set:Nn \l_@@_sin_fp { round ( sind ( #2 ) , 5 ) }
+ \@@_matrix:n
+ {
+ \fp_use:N \l_@@_cos_fp \c_space_tl
+ \fp_compare:nNnTF \l_@@_sin_fp = \c_zero_fp
+ { 0~0 }
+ {
+ \fp_use:N \l_@@_sin_fp
+ \c_space_tl
+ \fp_eval:n { -\l_@@_sin_fp }
+ }
+ \c_space_tl
+ \fp_use:N \l_@@_cos_fp
+ }
+ \box_use:N #1
+ \@@_scope_end:
+ }
+\fp_new:N \l_@@_cos_fp
+\fp_new:N \l_@@_sin_fp
+% \end{macrocode}
+% \end{variable}
+% \end{macro}
+%
+% \begin{macro}{\@@_box_use_scale:Nnn}
+% The same idea as for rotation but without the complexity of signs and
+% cosines.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_box_use_scale:Nnn #1#2#3
+ {
+ \@@_scope_begin:
+ \@@_matrix:n
+ {
+ \fp_eval:n { round ( #2 , 5 ) } ~
+ 0~0~
+ \fp_eval:n { round ( #3 , 5 ) }
+ }
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \@@_scope_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</dvipdfmx|pdfmode|xdvipdfmx>
+% \end{macrocode}
+%
+% \subsection{\texttt{dvips} driver}
+%
+% \begin{macrocode}
+%<*dvips>
+% \end{macrocode}
+%
+% \subsubsection{Basics}
+%
+% \begin{macro}[int]{\@@_literal:n}
% In the case of \texttt{dvips} there is no build-in saving of the current
% position, and so some additional PostScript is required to set up the
% transformation matrix and also to restore it afterwards. Notice the use
% of the stack to save the current position \enquote{up front} and to
% move back to it at the end of the process.
% \begin{macrocode}
-%<*dvips>
+\cs_new_protected:Npx \@@_literal:n #1
{
\tex_special:D
{
@@ -300,214 +563,114 @@
neg~exch~neg~exch~translate
}
}
-%</dvips>
-%<*pdfmode>
- {
- \cs_if_exist:NTF \luatex_pdfextension:D
- { \luatex_pdfextension:D literal }
- { \pdftex_pdfliteral:D }
- {#1}
- }
-%</pdfmode>
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_scope_begin:, \@@_scope_end:}
+% Scope saving/restoring is done directly with no need to worry about the
+% transformation matrix.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_scope_begin:
+ { \tex_special:D { ps:gsave } }
+\cs_new_protected_nopar:Npn \@@_scope_end:
+ { \tex_special:D { ps:grestore } }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Driver-specific auxiliaries}
+%
% \begin{macro}[int, EXP]{\@@_absolute_lengths:n}
% The \texttt{dvips} driver scales all absolute dimensions based
% on the output resolution selected and any \TeX{} magnification. Thus
% for any operation involving absolute lengths there is a correction to
-% make. This is based on |normalscale| from \texttt{special.pro}.
+% make. This is based on \texttt{normalscale} from \texttt{special.pro}
+% but using the stack rather than a definition to save the current matrix.
% \begin{macrocode}
-%<*dvips>
\cs_new:Npn \@@_absolute_lengths:n #1
{
- /savedmatrix~matrix~currentmatrix~def~
+ matrix~currentmatrix~
Resolution~72~div~VResolution~72~div~scale~
DVImag~dup~scale~
#1 ~
- savedmatrix~setmatrix
+ setmatrix
}
-%</dvips>
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[int]{\@@_matrix:n}
-% Here the appropriate function is set up to insert an affine matrix
-% into the PDF. With \pdfTeX{} and \LuaTeX{} in direct PDF output mode there
-% is a primitive for this, which only needs the rotation/scaling/skew part.
-% With \texttt{(x)dvipdfmx} the matrix also has to include a translation
-% part: that is always zero and so is built in here.
-% \begin{macrocode}
-%<*!dvips>
-\cs_new_protected:Npx \@@_matrix:n #1
-%<*pdfmode>
- {
- \cs_if_exist:NTF \luatex_pdfextension:D
- { \luatex_pdfextension:D setmatrix }
- { \pdftex_pdfsetmatrix:D }
- {#1}
- }
-%</pdfmode>
-%<*dvipdfmx|xdvipdfmx>
- { \@@_literal:n { #1 \c_space_tl 0~0~cm } }
-%</dvipdfmx|xdvipdfmx>
-%</!dvips>
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Box clipping}
+% \subsubsection{Box operations}
%
% \begin{macro}{\@@_box_use_clip:N}
-% The overall logic to clipping a box is the same in all cases. The general
-% method is to save the current location, define a clipping path equivalent
-% to the bounding box, then insert the content at the current position
-% and in a zero width box. The \enquote{real} width is then made up using
-% a horizontal skip before tidying up. There are other approaches that
-% can be taken (for example using XForm objects), but the logic here shares
-% as much code as possible and uses the same conversions (and so same
-% rounding errors) in all three cases.
+% Much the same idea as for the PDF mode version but with a slightly
+% different syntax for creating the clip path. To avoid any scaling
+% issues we need the absolute length auxiliary here.
% \begin{macrocode}
\cs_new_protected:Npn \@@_box_use_clip:N #1
{
- \@@_state_save:
-%<*dvips>
+ \@@_scope_begin:
\@@_literal:n
{
\@@_absolute_lengths:n
{
- 0~
+ 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
}
}
-%</dvips>
-%<*dvipdfmx|pdfmode|xdvipdfmx>
- \@@_literal:n
- {
- 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 } ~
- re~W~n
- }
-%</dvipdfmx|pdfmode|xdvipdfmx>
-% \end{macrocode}
-% Insert the material in a box of no width, restore the graphic state
-% and then insert the necessary width.
-% \begin{macrocode}
\hbox_overlap_right:n { \box_use:N #1 }
- \@@_state_restore:
+ \@@_scope_end:
\skip_horizontal:n { \box_wd:N #1 }
}
% \end{macrocode}
% \end{macro}
%
-% \subsection{Box rotation and scaling}
-%
-% \begin{macro}{\@@_box_rotate_begin:, \@@_box_rotate_end:}
-% The driver for \texttt{dvips} works with a simple rotation angle.
-% In PDF mode, an affine matrix is used instead. The transformation for
-% \texttt{(x)dvipdfmx} can be done either way: the affine approach is
-% chosen here as where possible we pick the PDF-style route.
-%
-% In both cases, some rounding code is included to limit the floating
-% point values to five decimal places. There is no point using any more
-% as \TeX{}'s dimensions are of that precision, and the extra figures
-% will simply bloat the PDF and make values harder to trace. In the
-% case where the sine and cosine are used, we store the rounded values to
-% avoid rounding twice. There are also a couple of comparisons to ensure
-% that |-0| is not written to the output, as this avoids any issues with
-% problematic display programs. Note that numbers are compared to~$0$
-% after rounding.
+% \begin{macro}{\@@_box_use_rotate:Nn}
+% Rotating using \texttt{dvips} does not require that the box dimensions
+% are altered and has a very convenient built-in operation. Zero rotation
+% must be written as |0| not |-0| so there is a quick test.
% \begin{macrocode}
-\cs_new_protected_nopar:Npn \@@_box_rotate_begin:
+\cs_new_protected:Npn \@@_box_use_rotate:Nn #1#2
{
- \@@_state_save:
-%<*dvipdfmx|pdfmode|xdvipdfmx>
- \box_set_wd:Nn \l__box_internal_box \c_zero_dim
- \fp_set:Nn \l__box_cos_fp { round ( \l__box_cos_fp , 5 ) }
- \fp_compare:nNnT \l__box_cos_fp = \c_zero_fp
- { \fp_zero:N \l__box_cos_fp }
- \fp_set:Nn \l__box_sin_fp { round ( \l__box_sin_fp , 5 ) }
- \@@_matrix:n
- {
- \fp_use:N \l__box_cos_fp \c_space_tl
- \fp_compare:nNnTF \l__box_sin_fp = \c_zero_fp
- { 0~0 }
- {
- \fp_use:N \l__box_sin_fp
- \c_space_tl
- \fp_eval:n { -\l__box_sin_fp }
- }
- \c_space_tl
- \fp_use:N \l__box_cos_fp
- }
-%</dvipdfmx|pdfmode|xdvipdfmx>
-%<*dvips>
- \fp_set:Nn \l__box_angle_fp { round ( \l__box_angle_fp , 5 ) }
+ \@@_scope_begin:
\@@_literal:n
{
- \fp_compare:nNnTF \l__box_angle_fp = \c_zero_fp
+ \fp_compare:nNnTF {#2} = \c_zero_fp
{ 0 }
- { \fp_eval:n { -\l__box_angle_fp } }
- \c_space_tl
+ { \fp_eval:n { round ( -#2 , 5 ) } } ~
rotate
}
-%</dvips>
+ \box_use:N #1
+ \@@_scope_end:
}
-% \end{macrocode}
-% The end of a rotation means tidying up the output grouping.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_box_rotate_end: \@@_state_restore:
-% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_box_scale_begin:, \@@_box_scale_end:}
-% Scaling is not dissimilar to rotation, but the calculations are somewhat
-% less complex.
+% \begin{macro}{\@@_box_use_scale:Nnn}
+% The \texttt{dvips} driver once again has a dedicated operation we can
+% use here.
% \begin{macrocode}
-\cs_new_protected_nopar:Npn \@@_box_scale_begin:
+\cs_new_protected:Npn \@@_box_use_scale:Nnn #1#2#3
{
- \@@_state_save:
- \fp_set:Nn \l__box_scale_x_fp { round ( \l__box_scale_x_fp , 5 ) }
- \fp_set:Nn \l__box_scale_y_fp { round ( \l__box_scale_y_fp , 5 ) }
-%<*dvips>
+ \@@_scope_begin:
\@@_literal:n
{
- \fp_use:N \l__box_scale_x_fp \c_space_tl
- \fp_use:N \l__box_scale_y_fp \c_space_tl
+ \fp_eval:n { round ( #2 , 5 ) } ~
+ \fp_eval:n { round ( #3 , 5 ) } ~
scale
}
-%</dvips>
-%<*dvipdfmx|pdfmode|xdvipdfmx>
- \@@_matrix:n
- {
- \fp_use:N \l__box_scale_x_fp \c_space_tl
- 0~0~
- \fp_use:N \l__box_scale_y_fp
- }
-%</dvipdfmx|pdfmode|xdvipdfmx>
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \@@_scope_end:
}
-\cs_new_eq:NN \@@_box_scale_end: \@@_state_restore:
% \end{macrocode}
% \end{macro}
%
-% \subsection{Color support}
+% \subsubsection{Color}
%
% \begin{variable}{\l_@@_current_color_tl}
-% The current color is needed by all of the engines, but the way this
-% is stored varies. In package mode if the \pkg{color} package is loaded
-% simply pick up what it is using.
+% The current color in driver-dependent format.
% \begin{macrocode}
\tl_new:N \l_@@_current_color_tl
-%<*dvipdfmx|dvips|xdvipdfmx>
\tl_set:Nn \l_@@_current_color_tl { gray~0 }
-%</dvipdfmx|dvips|xdvipdfmx>
-%<*pdfmode>
-\tl_set:Nn \l_@@_current_color_tl { 0~g~0~G }
-%</pdfmode>
%<*package>
\AtBeginDocument
{
@@ -519,59 +682,238 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{\l_@@_color_stack_int}
-% \pdfTeX{} and \LuaTeX{} have multiple stacks
-% available, and the color stack therefore needs a number when in PDF mode.
+% \begin{macro}[int]{\@@_color_ensure_current:}
+% \begin{macro}[aux]{\@@_color_reset:}
+% Directly set the color using the specials: no optimisation here.
% \begin{macrocode}
-%<*pdfmode>
-\int_new:N \l_@@_color_stack_int
-%</pdfmode>
+\cs_new_protected_nopar:Npn \@@_color_ensure_current:
+ {
+ \tex_special:D { color~push~\l_@@_current_color_tl }
+ \group_insert_after:N \@@_color_reset:
+ }
+
+\cs_new_protected_nopar:Npn \@@_color_reset:
+ { \tex_special:D { color~pop } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</dvips>
+% \end{macrocode}
+%
+% \subsection{\texttt{dvisvgm} driver}
+%
+% \begin{macrocode}
+%<*dvisvgm>
+% \end{macrocode}
+%
+% \subsubsection{Basics}
+%
+% \begin{macro}[int]{\@@_literal:n}
+% Unlike the other drivers, the requirements for making SVG files mean
+% that we can't conveniently transform all operations to the current point.
+% That makes life a bit more tricky later as that needs to be accounted for.
+% A new line is added after each call to help to keep the output readable
+% for debugging.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_literal:n #1
+ { \tex_special:D { dvisvgm:raw~ #1 { ?nl } } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_scope_begin:, \@@_scope_end:}
+% A scope in SVG terms is slightly different to the other drivers as
+% operations have to be \enquote{tied} to these not simply inside them.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_scope_begin:
+ { \@@_literal:n { <g> } }
+\cs_new_protected_nopar:Npn \@@_scope_end:
+ { \@@_literal:n { </g> } }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Driver-specific auxiliaries}
+%
+% \begin{macro}[int]{\@@_scope_begin:n}
+% In SVG transformations, clips and so on are attached directly to scopes so
+% we need a way or allowing for that. This is rather more useful that
+% \cs{@@_scope_begin:} as a result. No assumptions are made about the nature
+% of the scoped operation(s).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_scope_begin:n #1
+ { \@@_literal:n { <g~ #1 > } }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Box operations}
+%
+% \begin{macro}[int]{\@@_box_use_clip:N}
+% \begin{variable}[aux]{\g_@@_clip_path_int}
+% Clipping in SVG is more involved than with other drivers. The first issue
+% is that the clipping path must be defined separately from where it is used,
+% so we need to track how many paths have applied. The naming here uses
+% \texttt{l3cp} as the namespace with a number following. Rather than use
+% a rectangular operation, we define the path manually as this allows it to
+% have a depth: easier than the alternative approach of shifting content
+% up and down using scopes to allow for the depth of the \TeX{} box and
+% keep the reference point the same!
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_box_use_clip:N #1
+ {
+ \int_gincr:N \g_@@_clip_path_int
+ \@@_literal:n
+ { < clipPath~id = " l3cp \int_use:N \g_@@_clip_path_int " > }
+ \@@_literal:n
+ {
+ <
+ path ~ d =
+ "
+ M ~ 0 ~
+ \dim_to_decimal:n { -\box_dp:N #1 } ~
+ L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
+ \dim_to_decimal:n { -\box_dp:N #1 } ~
+ L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
+ \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
+ L ~ 0 ~
+ \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
+ Z
+ "
+ />
+ }
+ \@@_literal:n
+ { < /clipPath > }
+% \end{macrocode}
+% In general the SVG set up does not try to transform coordinates to the
+% current point. For clipping we need to do that, so have a transformation
+% here to get us to the right place, and a matching one just before the
+% \TeX{} box is inserted to get things back on track. The clip path needs to
+% come between those two such that if lines up with the current point, as
+% does the \TeX{} box.
+% \begin{macrocode}
+ \@@_scope_begin:n
+ {
+ transform =
+ "
+ translate ( { ?x } , { ?y } ) ~
+ scale ( 1 , -1 )
+ "
+ }
+ \@@_scope_begin:n
+ {
+ clip-path = "url ( \c_hash_str l3cp \int_use:N \g_@@_clip_path_int ) "
+ }
+ \@@_scope_begin:n
+ {
+ transform =
+ "
+ scale ( -1 , 1 ) ~
+ translate ( { ?x } , { ?y } ) ~
+ scale ( -1 , -1 )
+ "
+ }
+ \box_use:N #1
+ \@@_scope_end:
+ \@@_scope_end:
+ \@@_scope_end:
+% \skip_horizontal:n { \box_wd:N #1 }
+ }
+\int_new:N \g_@@_clip_path_int
% \end{macrocode}
% \end{variable}
+% \end{macro}
%
-% \begin{macro}{\@@_color_ensure_current:}
-% \begin{macro}[aux]{\@@_color_reset:}
-% Setting the current color depends on the nature of the color stack
-% available. In all cases there is a need to reset the color after
-% the current group.
+% \begin{macro}[int]{\@@_box_use_rotate:Nn}
+% Rotation has a dedicated operation which includes a centre-of-rotation
+% optional pair. That can be picked up from the driver syntax, so there is
+% no need to worry about the transformation matrix.
% \begin{macrocode}
-\cs_new_protected_nopar:Npx \@@_color_ensure_current:
-%<*dvipdfmx|dvips|xdvipdfmx>
+\cs_new_protected:Npn \@@_box_use_rotate:Nn #1#2
{
- \tex_special:D { color~push~\exp_not:N \l_@@_current_color_tl }
- \group_insert_after:N \exp_not:N \@@_color_reset:
+ \@@_scope_begin:n
+ {
+ transform =
+ "
+ rotate
+ ( \fp_eval:n { round ( -#2 , 5 ) } , ~ { ?x } , ~ { ?y } )
+ "
+ }
+ \box_use:N #1
+ \@@_scope_end:
}
-%</dvipdfmx|dvips|xdvipdfmx>
-%<*pdfmode>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_box_use_scale:Nnn}
+% In contrast to rotation, we have to account for the current position in this
+% case. That is done using a couple of translations in addition to the scaling
+% (which is therefore done backward with a flip).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_box_use_scale:Nnn #1#2#3
{
- \cs_if_exist:NTF \luatex_pdfextension:D
- { \luatex_pdfextension:D colorstack }
- { \pdftex_pdfcolorstack:D }
- \exp_not:N \l_@@_color_stack_int push
- { \exp_not:N \l_@@_current_color_tl }
- \group_insert_after:N \exp_not:N \@@_color_reset:
+ \@@_scope_begin:n
+ {
+ transform =
+ "
+ translate ( { ?x } , { ?y } ) ~
+ scale
+ (
+ \fp_eval:n { round ( -#2 , 5 ) } ,
+ \fp_eval:n { round ( -#3 , 5 ) }
+ ) ~
+ translate ( { ?x } , { ?y } ) ~
+ scale ( -1 )
+ "
+ }
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \@@_scope_end:
}
-%</pdfmode>
-\cs_new_protected_nopar:Npx \@@_color_reset:
-%<*dvipdfmx|dvips|xdvipdfmx>
- { \tex_special:D { color~pop } }
-%</dvipdfmx|dvips|xdvipdfmx>
-%<*pdfmode>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Color}
+%
+% \begin{variable}{\l_@@_current_color_tl}
+% The current color in driver-dependent format: the same as for
+% \texttt{dvips}.
+% \begin{macrocode}
+\tl_new:N \l_@@_current_color_tl
+\tl_set:Nn \l_@@_current_color_tl { gray~0 }
+%<*package>
+\AtBeginDocument
{
- \cs_if_exist:NTF \luatex_pdfextension:D
- { \luatex_pdfextension:D colorstack }
- { \pdftex_pdfcolorstack:D }
- \exp_not:N \l_@@_color_stack_int pop \scan_stop:
+ \@ifpackageloaded { color }
+ { \tl_set:Nn \l_@@_current_color_tl { \current@color } }
+ { }
}
-%</pdfmode>
+%</package>
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[int]{\@@_color_ensure_current:}
+% \begin{macro}[aux]{\@@_color_reset:}
+% Directly set the color: same as \texttt{dvips}.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_color_ensure_current:
+ {
+ \tex_special:D { color~push~\l_@@_current_color_tl }
+ \group_insert_after:N \exp_not:N \@@_color_reset:
+ }
+
+\cs_new_protected_nopar:Npn \@@_color_reset:
+ { \tex_special:D { color~pop } }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macrocode}
+%</dvisvgm>
+% \end{macrocode}
+%
+% \begin{macrocode}
%</initex|package>
% \end{macrocode}
%
% \end{implementation}
%
-% \PrintIndex
+% \PrintIndex \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
index 1dabe7732ed..30bfd609096 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins
+++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
@@ -84,7 +84,9 @@ Do not distribute a modified version of this file.
}
}
+\generate{\file{l3dvipdfmx.ltx} {\from{l3drivers.dtx}{initex,dvipdfmx} }}
\generate{\file{l3dvips.ltx} {\from{l3drivers.dtx}{initex,dvips} }}
+\generate{\file{l3dvisvgm.ltx} {\from{l3drivers.dtx}{initex,dvisvgm} }}
\generate{\file{l3pdfmode.ltx} {\from{l3drivers.dtx}{initex,pdfmode} }}
\generate{\file{l3xdvipdfmx.ltx}{\from{l3drivers.dtx}{initex,xdvipdfmx}}}
diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
index 035c21945e1..550ef6a942f 100644
--- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
@@ -37,8 +37,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3keys2e}{Support package l3kernel too old}
@@ -52,8 +52,8 @@
%<package> }
\def\ExplFileName{l3keys2e}
\def\ExplFileDescription{LaTeX2e option processing using LaTeX3 keys}
-\def\ExplFileDate{2016/04/20}
-\def\ExplFileVersion{6476}
+\def\ExplFileDate{2016/05/14}
+\def\ExplFileVersion{6495}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
index b6330fa6a8d..3bd3682dff6 100644
--- a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
@@ -38,8 +38,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{xfrac}{Support package l3kernel too old}
@@ -54,8 +54,8 @@
\RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
\def\ExplFileName{xfrac}
\def\ExplFileDescription{L3 Experimental split-level fractions}
-\def\ExplFileDate{2016/04/20}
-\def\ExplFileVersion{6476}
+\def\ExplFileDate{2016/05/14}
+\def\ExplFileVersion{6495}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
index 343751e6ad1..1a2e9767429 100644
--- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
@@ -41,8 +41,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{xparse}{Support package l3kernel too old}
@@ -56,8 +56,8 @@
%<package> }
\def\ExplFileName{xparse}
\def\ExplFileDescription{L3 Experimental document command parser}
-\def\ExplFileDate{2016/04/20}
-\def\ExplFileVersion{6476}
+\def\ExplFileDate{2016/05/14}
+\def\ExplFileVersion{6495}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
index 4a9fc0bd802..0514e96486e 100644
--- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
@@ -41,8 +41,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2016/04/20]
-%<package>\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+%<package>\@ifpackagelater{expl3}{2016/05/14}
%<package> {}
%<package> {%
%<package> \PackageError{xtemplate}{Support package l3kernel too old}
@@ -56,8 +56,8 @@
%<package> }
\def\ExplFileName{xtemplate}
\def\ExplFileDescription{L3 Experimental prototype document functions}
-\def\ExplFileDate{2016/04/20}
-\def\ExplFileVersion{6476}
+\def\ExplFileDate{2016/05/14}
+\def\ExplFileVersion{6495}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
index eb02643481b..404a6d581c3 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
@@ -46,8 +46,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{l3sort}{Support package l3kernel too old}
@@ -59,7 +59,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3sort.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3sort.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental sorting functions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty
index 02954e8b14f..560d0edf277 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty
@@ -45,8 +45,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{l3flag}{Support package l3kernel too old}
@@ -58,7 +58,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3flag.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3flag.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental flags}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty
index 79195e0f1d5..ea479829d46 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty
@@ -45,8 +45,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{l3regex}{Support package l3kernel too old}
@@ -58,7 +58,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3regex.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3regex.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental regular expressions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
index 2ae92c23ac8..e1e95236068 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
@@ -45,8 +45,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{l3regex}{Support package l3kernel too old}
@@ -58,7 +58,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3regex.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3regex.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental regular expressions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty
index bf081c6925f..c98c6edee9e 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty
@@ -45,8 +45,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{l3tl-build}{Support package l3kernel too old}
@@ -58,7 +58,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3tl-build.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3tl-build.dtx 6492 2016-05-14 20:27:55Z joseph $
{L3 Experimental token list construction}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
index 5776af0598a..8fcffdf3ff0 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
@@ -47,8 +47,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{l3galley}{Support package l3kernel too old}
@@ -60,7 +60,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3galley.dtx 6476 2016-04-20 19:46:45Z joseph $
+\GetIdInfo$Id: l3galley.dtx 6493 2016-05-14 21:08:13Z joseph $
{L3 Experimental galley code}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -675,8 +675,43 @@
}
\cs_new_protected:Npn \galley_penalty_set_single:n #1
{ \tl_gset:Nx \g__galley_interpar_penalty_user_tl { \int_eval:n {#1} } }
+\cs_new_protected:Npn \galley_penalty_add_single:n #1
+ {
+ \tl_gset:Nx \g__galley_interpar_penalty_user_tl
+ {
+ \int_eval:n
+ {
+ \tl_if_empty:NF \g__galley_interpar_penalty_user_tl
+ { \g__galley_interpar_penalty_user_tl + }
+ #1
+ }
+ }
+ }
\cs_new_protected:Npn \galley_vspace_set_single:n #1
{ \tl_gset:Nx \g__galley_interpar_vspace_user_tl { \skip_eval:n {#1} } }
+\cs_new_protected:Npn \galley_vspace_add_single:n #1
+ {
+ \tl_gset:Nx \g__galley_interpar_vspace_user_tl
+ {
+ \skip_eval:n
+ {
+ \tl_if_empty:NF \g__galley_interpar_vspace_user_tl
+ { \g__galley_interpar_vspace_user_tl + }
+ #1
+ }
+ }
+ }
+\cs_new_protected:Npn \galley_vspace_max_single:n #1
+ {
+ \tl_if_empty:NTF \g__galley_interpar_vspace_user_tl
+ { \galley_vspace_set_single:n {#1} }
+ {
+ \dim_compare:nNnT
+ { \etex_glueexpr:D \g__galley_interpar_vspace_user_tl }
+ < { \etex_glueexpr:D #1 \scan_stop: }
+ { \galley_vspace_set_single:n {#1} }
+ }
+ }
\dim_set:Nn \parskip \c_zero_dim
\cs_undefine:N \parskip
\skip_new:N \parskip
@@ -902,9 +937,6 @@
}
}
\newpage
- \tl_gput_right:Nn \g_galley_whatsit_next_tl
- { \iow_shipout:Nx \c_minus_one { } }
- \tex_vbox:D { }
\galley_penalty_set_single:n { -\@Mi }
}
\cs_set_nopar:Npn \nobreak
@@ -920,7 +952,7 @@
\@vspace
\@vspace
}
-\cs_set:Npn \@vspace #1 { \galley_vspace_set_single:n {#1} }
+\cs_set:Npn \@vspace #1 { \galley_vspace_add_single:n {#1} }
\DeclareRobustCommand \\
{
\@ifstar
@@ -939,8 +971,8 @@
\DeclareRobustCommand \newline
{ \galley_break_line:Nn \c_true_bool { 0pt } }
\cs_set_eq:cN { @ @ par } \galley_par:
-\cs_set_nopar:Npn \addpenalty { \galley_penalty_set_single:n }
-\cs_set_nopar:Npn \addvspace { \galley_vspace_set_single:n }
+\cs_set_nopar:Npn \addpenalty { \galley_penalty_add_single:n }
+\cs_set_nopar:Npn \addvspace { \galley_vspace_max_single:n }
\cs_set_nopar:Npn \@afterheading
{
\bool_gset_true:N \g_galley_no_break_next_bool
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index 795323b757e..2d36561733f 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -82,8 +82,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}%
\def\ExplFileDescription{L3 programming layer}%
-\def\ExplFileDate{2016/04/20}%
-\def\ExplFileVersion{6476}%
+\def\ExplFileDate{2016/05/14}%
+\def\ExplFileVersion{6495}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -17333,7 +17333,7 @@
%%
%% -----------------------------------------------------------------------
%%
-\GetIdInfo$Id: l3candidates.dtx 6456 2016-03-25 21:09:37Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 6484 2016-05-13 19:08:30Z joseph $
{L3 Experimental additions to l3kernel}
\cs_new_protected_nopar:Npn \cs_log:N
{ \__msg_log_next: \cs_show:N }
@@ -17389,9 +17389,9 @@
\tex_kern:D -\l__box_left_new_dim
\hbox:n
{
- \__driver_box_rotate_begin:
- \box_use:N \l__box_internal_box
- \__driver_box_rotate_end:
+ \__driver_box_use_rotate:Nn
+ \l__box_internal_box
+ \l__box_angle_fp
}
}
\box_set_ht:Nn \l__box_internal_box { \l__box_top_new_dim }
@@ -17600,9 +17600,10 @@
{
\hbox_set:Nn \l__box_internal_box
{
- \__driver_box_scale_begin:
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_box_scale_end:
+ \__driver_box_use_scale:Nnn
+ #1
+ \l__box_scale_x_fp
+ \l__box_scale_y_fp
}
\fp_compare:nNnTF \l__box_scale_y_fp > \c_zero_fp
{
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index 5e355680c6b..615774d6de2 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
@@ -47,8 +47,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}%
\def\ExplFileDescription{L3 programming layer}%
-\def\ExplFileDate{2016/04/20}%
-\def\ExplFileVersion{6476}%
+\def\ExplFileDate{2016/05/14}%
+\def\ExplFileVersion{6495}%
\let\ExplLoaderFileVersion\ExplFileVersion
\begingroup
\def\tempa{LaTeX2e}%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index 6b11a05f308..6d06ca11f3d 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
@@ -47,8 +47,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}%
\def\ExplFileDescription{L3 programming layer}%
-\def\ExplFileDate{2016/04/20}%
-\def\ExplFileVersion{6476}%
+\def\ExplFileDate{2016/05/14}%
+\def\ExplFileVersion{6495}%
\let\ExplLoaderFileVersion\ExplFileVersion
\ProvidesPackage{\ExplFileName}
[%
@@ -172,6 +172,24 @@
}
}
},
+ driver / dvisvgm .code:n =
+ {
+ \tl_set:Nn \l__expl_driver_tl { dvisvgm }
+ \sys_if_engine_xetex:TF
+ {
+ \__msg_kernel_error:nnnn { expl } { wrong-driver }
+ { dvips } { xdvipdfmx }
+ \tl_set:Nn \l__expl_driver_tl { xdvipdfmx }
+ }
+ {
+ \sys_if_output_pdf:T
+ {
+ \__msg_kernel_error:nnnn { expl } { wrong-driver }
+ { dvips } { pdfmode }
+ \tl_set:Nn \l__expl_driver_tl { pdfmode }
+ }
+ }
+ },
driver / latex2e .code:n =
{ \tl_set:Nn \l__expl_driver_tl { latex2e } },
driver / pdfmode .code:n =
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
index 0c905c2845a..59dc81cc5ce 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
@@ -46,22 +46,37 @@
%%
%% -----------------------------------------------------------------------
%%
-\GetIdInfo$Id: l3drivers.dtx 6472 2016-04-05 13:26:17Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 6494 2016-05-14 21:10:56Z joseph $
{L3 Experimental drivers}
\ProvidesExplFile
{l3dvidpfmx.def}{\ExplFileDate}{\ExplFileVersion}
{L3 Experimental driver: dvipdfmx}
-\cs_new_protected_nopar:Npx \__driver_state_save:
- { \tex_special:D { pdf:literal~q } }
-\cs_new_protected_nopar:Npx \__driver_state_restore:
- { \tex_special:D { pdf:literal~Q } }
-\cs_new_protected:Npx \__driver_literal:n #1
+\cs_new_protected:Npn \__driver_literal:n #1
{ \tex_special:D { pdf:literal~ #1 } }
-\cs_new_protected:Npx \__driver_matrix:n #1
+\cs_new_protected_nopar:Npn \__driver_scope_begin:
+ { \__driver_literal:n { q } }
+\cs_new_protected_nopar:Npn \__driver_scope_end:
+ { \__driver_literal:n { Q } }
+\cs_new_protected:Npn \__driver_matrix:n #1
{ \__driver_literal:n { #1 \c_space_tl 0~0~cm } }
+\tl_new:N \l__driver_current_color_tl
+\tl_set:Nn \l__driver_current_color_tl { [ 0 ] }
+\AtBeginDocument
+ {
+ \@ifpackageloaded { color }
+ { \tl_set:Nn \l__driver_current_color_tl { \current@color } }
+ { }
+ }
+\cs_new_protected_nopar:Npx \__driver_color_ensure_current:
+ {
+ \tex_special:D { pdf:bcolor~\l__driver_current_color_tl }
+ \group_insert_after:N \exp_not:N \__driver_color_reset:
+ }
+\cs_new_protected_nopar:Npx \__driver_color_reset:
+ { \tex_special:D { pdf:ecolor } }
\cs_new_protected:Npn \__driver_box_use_clip:N #1
{
- \__driver_state_save:
+ \__driver_scope_begin:
\__driver_literal:n
{
0~
@@ -71,60 +86,47 @@
re~W~n
}
\hbox_overlap_right:n { \box_use:N #1 }
- \__driver_state_restore:
+ \__driver_scope_end:
\skip_horizontal:n { \box_wd:N #1 }
}
-\cs_new_protected_nopar:Npn \__driver_box_rotate_begin:
+\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
{
- \__driver_state_save:
- \box_set_wd:Nn \l__box_internal_box \c_zero_dim
- \fp_set:Nn \l__box_cos_fp { round ( \l__box_cos_fp , 5 ) }
- \fp_compare:nNnT \l__box_cos_fp = \c_zero_fp
- { \fp_zero:N \l__box_cos_fp }
- \fp_set:Nn \l__box_sin_fp { round ( \l__box_sin_fp , 5 ) }
+ \__driver_scope_begin:
+ \box_set_wd:Nn #1 \c_zero_dim
+ \fp_set:Nn \l__driver_cos_fp { round ( cosd ( #2 ) , 5 ) }
+ \fp_compare:nNnT \l__driver_cos_fp = \c_zero_fp
+ { \fp_zero:N \l__driver_cos_fp }
+ \fp_set:Nn \l__driver_sin_fp { round ( sind ( #2 ) , 5 ) }
\__driver_matrix:n
{
- \fp_use:N \l__box_cos_fp \c_space_tl
- \fp_compare:nNnTF \l__box_sin_fp = \c_zero_fp
+ \fp_use:N \l__driver_cos_fp \c_space_tl
+ \fp_compare:nNnTF \l__driver_sin_fp = \c_zero_fp
{ 0~0 }
{
- \fp_use:N \l__box_sin_fp
+ \fp_use:N \l__driver_sin_fp
\c_space_tl
- \fp_eval:n { -\l__box_sin_fp }
+ \fp_eval:n { -\l__driver_sin_fp }
}
\c_space_tl
- \fp_use:N \l__box_cos_fp
+ \fp_use:N \l__driver_cos_fp
}
+ \box_use:N #1
+ \__driver_scope_end:
}
-\cs_new_eq:NN \__driver_box_rotate_end: \__driver_state_restore:
-\cs_new_protected_nopar:Npn \__driver_box_scale_begin:
+\fp_new:N \l__driver_cos_fp
+\fp_new:N \l__driver_sin_fp
+\cs_new_protected:Npn \__driver_box_use_scale:Nnn #1#2#3
{
- \__driver_state_save:
- \fp_set:Nn \l__box_scale_x_fp { round ( \l__box_scale_x_fp , 5 ) }
- \fp_set:Nn \l__box_scale_y_fp { round ( \l__box_scale_y_fp , 5 ) }
+ \__driver_scope_begin:
\__driver_matrix:n
{
- \fp_use:N \l__box_scale_x_fp \c_space_tl
+ \fp_eval:n { round ( #2 , 5 ) } ~
0~0~
- \fp_use:N \l__box_scale_y_fp
+ \fp_eval:n { round ( #3 , 5 ) }
}
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \__driver_scope_end:
}
-\cs_new_eq:NN \__driver_box_scale_end: \__driver_state_restore:
-\tl_new:N \l__driver_current_color_tl
-\tl_set:Nn \l__driver_current_color_tl { gray~0 }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- { \tl_set:Nn \l__driver_current_color_tl { \current@color } }
- { }
- }
-\cs_new_protected_nopar:Npx \__driver_color_ensure_current:
- {
- \tex_special:D { color~push~\exp_not:N \l__driver_current_color_tl }
- \group_insert_after:N \exp_not:N \__driver_color_reset:
- }
-\cs_new_protected_nopar:Npx \__driver_color_reset:
- { \tex_special:D { color~pop } }
%%
%%
%% End of file `l3dvipdfmx.def'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
index 367bdaf2526..30c8a6dc4f3 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
@@ -46,15 +46,11 @@
%%
%% -----------------------------------------------------------------------
%%
-\GetIdInfo$Id: l3drivers.dtx 6472 2016-04-05 13:26:17Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 6494 2016-05-14 21:10:56Z joseph $
{L3 Experimental drivers}
\ProvidesExplFile
{l3dvips.def}{\ExplFileDate}{\ExplFileVersion}
{L3 Experimental driver: dvips}
-\cs_new_protected_nopar:Npx \__driver_state_save:
- { \tex_special:D { ps:gsave } }
-\cs_new_protected_nopar:Npx \__driver_state_restore:
- { \tex_special:D { ps:grestore } }
\cs_new_protected:Npx \__driver_literal:n #1
{
\tex_special:D
@@ -66,22 +62,26 @@
neg~exch~neg~exch~translate
}
}
+\cs_new_protected_nopar:Npn \__driver_scope_begin:
+ { \tex_special:D { ps:gsave } }
+\cs_new_protected_nopar:Npn \__driver_scope_end:
+ { \tex_special:D { ps:grestore } }
\cs_new:Npn \__driver_absolute_lengths:n #1
{
- /savedmatrix~matrix~currentmatrix~def~
+ matrix~currentmatrix~
Resolution~72~div~VResolution~72~div~scale~
DVImag~dup~scale~
#1 ~
- savedmatrix~setmatrix
+ setmatrix
}
\cs_new_protected:Npn \__driver_box_use_clip:N #1
{
- \__driver_state_save:
+ \__driver_scope_begin:
\__driver_literal:n
{
\__driver_absolute_lengths:n
{
- 0~
+ 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 } ~
@@ -89,36 +89,34 @@
}
}
\hbox_overlap_right:n { \box_use:N #1 }
- \__driver_state_restore:
+ \__driver_scope_end:
\skip_horizontal:n { \box_wd:N #1 }
}
-\cs_new_protected_nopar:Npn \__driver_box_rotate_begin:
+\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
{
- \__driver_state_save:
- \fp_set:Nn \l__box_angle_fp { round ( \l__box_angle_fp , 5 ) }
+ \__driver_scope_begin:
\__driver_literal:n
{
- \fp_compare:nNnTF \l__box_angle_fp = \c_zero_fp
+ \fp_compare:nNnTF {#2} = \c_zero_fp
{ 0 }
- { \fp_eval:n { -\l__box_angle_fp } }
- \c_space_tl
+ { \fp_eval:n { round ( -#2 , 5 ) } } ~
rotate
}
+ \box_use:N #1
+ \__driver_scope_end:
}
-\cs_new_eq:NN \__driver_box_rotate_end: \__driver_state_restore:
-\cs_new_protected_nopar:Npn \__driver_box_scale_begin:
+\cs_new_protected:Npn \__driver_box_use_scale:Nnn #1#2#3
{
- \__driver_state_save:
- \fp_set:Nn \l__box_scale_x_fp { round ( \l__box_scale_x_fp , 5 ) }
- \fp_set:Nn \l__box_scale_y_fp { round ( \l__box_scale_y_fp , 5 ) }
+ \__driver_scope_begin:
\__driver_literal:n
{
- \fp_use:N \l__box_scale_x_fp \c_space_tl
- \fp_use:N \l__box_scale_y_fp \c_space_tl
+ \fp_eval:n { round ( #2 , 5 ) } ~
+ \fp_eval:n { round ( #3 , 5 ) } ~
scale
}
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \__driver_scope_end:
}
-\cs_new_eq:NN \__driver_box_scale_end: \__driver_state_restore:
\tl_new:N \l__driver_current_color_tl
\tl_set:Nn \l__driver_current_color_tl { gray~0 }
\AtBeginDocument
@@ -127,12 +125,13 @@
{ \tl_set:Nn \l__driver_current_color_tl { \current@color } }
{ }
}
-\cs_new_protected_nopar:Npx \__driver_color_ensure_current:
+\cs_new_protected_nopar:Npn \__driver_color_ensure_current:
{
- \tex_special:D { color~push~\exp_not:N \l__driver_current_color_tl }
- \group_insert_after:N \exp_not:N \__driver_color_reset:
+ \tex_special:D { color~push~\l__driver_current_color_tl }
+ \group_insert_after:N \__driver_color_reset:
}
-\cs_new_protected_nopar:Npx \__driver_color_reset:
+
+\cs_new_protected_nopar:Npn \__driver_color_reset:
{ \tex_special:D { color~pop } }
%%
%%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
new file mode 100644
index 00000000000..5b04f5d7297
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
@@ -0,0 +1,163 @@
+%%
+%% This is file `l3dvisvgm.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3drivers.dtx (with options: `package,dvisvgm')
+%%
+%% EXPERIMENTAL CODE
+%%
+%% Do not distribute this file without also distributing the
+%% source files specified above.
+%%
+%% Do not distribute a modified version of this file.
+%%
+%% File: l3drivers.dtx Copyright(C) 2011-2016 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
+%%
+%% http://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.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX Project Team.
+%%
+%% -----------------------------------------------------------------------
+%%
+\GetIdInfo$Id: l3drivers.dtx 6494 2016-05-14 21:10:56Z joseph $
+ {L3 Experimental drivers}
+\ProvidesExplFile
+ {l3dvisvgm.def}{\ExplFileDate}{\ExplFileVersion}
+ {L3 Experimental driver: dvisvgm}
+\cs_new_protected:Npn \__driver_literal:n #1
+ { \tex_special:D { dvisvgm:raw~ #1 { ?nl } } }
+\cs_new_protected_nopar:Npn \__driver_scope_begin:
+ { \__driver_literal:n { <g> } }
+\cs_new_protected_nopar:Npn \__driver_scope_end:
+ { \__driver_literal:n { </g> } }
+\cs_new_protected:Npn \__driver_scope_begin:n #1
+ { \__driver_literal:n { <g~ #1 > } }
+\cs_new_protected:Npn \__driver_box_use_clip:N #1
+ {
+ \int_gincr:N \g__driver_clip_path_int
+ \__driver_literal:n
+ { < clipPath~id = " l3cp \int_use:N \g__driver_clip_path_int " > }
+ \__driver_literal:n
+ {
+ <
+ path ~ d =
+ "
+ M ~ 0 ~
+ \dim_to_decimal:n { -\box_dp:N #1 } ~
+ L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
+ \dim_to_decimal:n { -\box_dp:N #1 } ~
+ L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
+ \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
+ L ~ 0 ~
+ \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
+ Z
+ "
+ />
+ }
+ \__driver_literal:n
+ { < /clipPath > }
+ \__driver_scope_begin:n
+ {
+ transform =
+ "
+ translate ( { ?x } , { ?y } ) ~
+ scale ( 1 , -1 )
+ "
+ }
+ \__driver_scope_begin:n
+ {
+ clip-path = "url ( \c_hash_str l3cp \int_use:N \g__driver_clip_path_int ) "
+ }
+ \__driver_scope_begin:n
+ {
+ transform =
+ "
+ scale ( -1 , 1 ) ~
+ translate ( { ?x } , { ?y } ) ~
+ scale ( -1 , -1 )
+ "
+ }
+ \box_use:N #1
+ \__driver_scope_end:
+ \__driver_scope_end:
+ \__driver_scope_end:
+ }
+\int_new:N \g__driver_clip_path_int
+\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
+ {
+ \__driver_scope_begin:n
+ {
+ transform =
+ "
+ rotate
+ ( \fp_eval:n { round ( -#2 , 5 ) } , ~ { ?x } , ~ { ?y } )
+ "
+ }
+ \box_use:N #1
+ \__driver_scope_end:
+ }
+\cs_new_protected:Npn \__driver_box_use_scale:Nnn #1#2#3
+ {
+ \__driver_scope_begin:n
+ {
+ transform =
+ "
+ translate ( { ?x } , { ?y } ) ~
+ scale
+ (
+ \fp_eval:n { round ( -#2 , 5 ) } ,
+ \fp_eval:n { round ( -#3 , 5 ) }
+ ) ~
+ translate ( { ?x } , { ?y } ) ~
+ scale ( -1 )
+ "
+ }
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \__driver_scope_end:
+ }
+\tl_new:N \l__driver_current_color_tl
+\tl_set:Nn \l__driver_current_color_tl { gray~0 }
+\AtBeginDocument
+ {
+ \@ifpackageloaded { color }
+ { \tl_set:Nn \l__driver_current_color_tl { \current@color } }
+ { }
+ }
+\cs_new_protected_nopar:Npn \__driver_color_ensure_current:
+ {
+ \tex_special:D { color~push~\l__driver_current_color_tl }
+ \group_insert_after:N \exp_not:N \__driver_color_reset:
+ }
+
+\cs_new_protected_nopar:Npn \__driver_color_reset:
+ { \tex_special:D { color~pop } }
+%%
+%%
+%% End of file `l3dvisvgm.def'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
index 045ebf399e7..05f466d3051 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
@@ -46,30 +46,30 @@
%%
%% -----------------------------------------------------------------------
%%
-\GetIdInfo$Id: l3drivers.dtx 6472 2016-04-05 13:26:17Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 6494 2016-05-14 21:10:56Z joseph $
{L3 Experimental drivers}
\ProvidesExplFile
{l3pdfmode.def}{\ExplFileDate}{\ExplFileVersion}
{L3 Experimental driver: PDF mode}
-\cs_new_protected_nopar:Npx \__driver_state_save:
+\cs_new_protected:Npx \__driver_literal:n #1
+ {
+ \cs_if_exist:NTF \luatex_pdfextension:D
+ { \luatex_pdfextension:D literal }
+ { \pdftex_pdfliteral:D }
+ {#1}
+ }
+\cs_new_protected_nopar:Npx \__driver_scope_begin:
{
\cs_if_exist:NTF \luatex_pdfextension:D
{ \luatex_pdfextension:D save \scan_stop: }
{ \pdftex_pdfsave:D }
}
-\cs_new_protected_nopar:Npx \__driver_state_restore:
+\cs_new_protected_nopar:Npx \__driver_scope_end:
{
\cs_if_exist:NTF \luatex_pdfextension:D
{ \luatex_pdfextension:D restore \scan_stop: }
{ \pdftex_pdfrestore:D }
}
-\cs_new_protected:Npx \__driver_literal:n #1
- {
- \cs_if_exist:NTF \luatex_pdfextension:D
- { \luatex_pdfextension:D literal }
- { \pdftex_pdfliteral:D }
- {#1}
- }
\cs_new_protected:Npx \__driver_matrix:n #1
{
\cs_if_exist:NTF \luatex_pdfextension:D
@@ -77,9 +77,34 @@
{ \pdftex_pdfsetmatrix:D }
{#1}
}
+\tl_new:N \l__driver_current_color_tl
+\tl_set:Nn \l__driver_current_color_tl { 0~g~0~G }
+\AtBeginDocument
+ {
+ \@ifpackageloaded { color }
+ { \tl_set:Nn \l__driver_current_color_tl { \current@color } }
+ { }
+ }
+\int_new:N \l__driver_color_stack_int
+\cs_new_protected_nopar:Npx \__driver_color_ensure_current:
+ {
+ \cs_if_exist:NTF \luatex_pdfextension:D
+ { \luatex_pdfextension:D colorstack }
+ { \pdftex_pdfcolorstack:D }
+ \exp_not:N \l__driver_color_stack_int push
+ { \exp_not:N \l__driver_current_color_tl }
+ \group_insert_after:N \exp_not:N \__driver_color_reset:
+ }
+\cs_new_protected_nopar:Npx \__driver_color_reset:
+ {
+ \cs_if_exist:NTF \luatex_pdfextension:D
+ { \luatex_pdfextension:D colorstack }
+ { \pdftex_pdfcolorstack:D }
+ \exp_not:N \l__driver_color_stack_int pop \scan_stop:
+ }
\cs_new_protected:Npn \__driver_box_use_clip:N #1
{
- \__driver_state_save:
+ \__driver_scope_begin:
\__driver_literal:n
{
0~
@@ -89,69 +114,46 @@
re~W~n
}
\hbox_overlap_right:n { \box_use:N #1 }
- \__driver_state_restore:
+ \__driver_scope_end:
\skip_horizontal:n { \box_wd:N #1 }
}
-\cs_new_protected_nopar:Npn \__driver_box_rotate_begin:
+\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
{
- \__driver_state_save:
- \box_set_wd:Nn \l__box_internal_box \c_zero_dim
- \fp_set:Nn \l__box_cos_fp { round ( \l__box_cos_fp , 5 ) }
- \fp_compare:nNnT \l__box_cos_fp = \c_zero_fp
- { \fp_zero:N \l__box_cos_fp }
- \fp_set:Nn \l__box_sin_fp { round ( \l__box_sin_fp , 5 ) }
+ \__driver_scope_begin:
+ \box_set_wd:Nn #1 \c_zero_dim
+ \fp_set:Nn \l__driver_cos_fp { round ( cosd ( #2 ) , 5 ) }
+ \fp_compare:nNnT \l__driver_cos_fp = \c_zero_fp
+ { \fp_zero:N \l__driver_cos_fp }
+ \fp_set:Nn \l__driver_sin_fp { round ( sind ( #2 ) , 5 ) }
\__driver_matrix:n
{
- \fp_use:N \l__box_cos_fp \c_space_tl
- \fp_compare:nNnTF \l__box_sin_fp = \c_zero_fp
+ \fp_use:N \l__driver_cos_fp \c_space_tl
+ \fp_compare:nNnTF \l__driver_sin_fp = \c_zero_fp
{ 0~0 }
{
- \fp_use:N \l__box_sin_fp
+ \fp_use:N \l__driver_sin_fp
\c_space_tl
- \fp_eval:n { -\l__box_sin_fp }
+ \fp_eval:n { -\l__driver_sin_fp }
}
\c_space_tl
- \fp_use:N \l__box_cos_fp
+ \fp_use:N \l__driver_cos_fp
}
+ \box_use:N #1
+ \__driver_scope_end:
}
-\cs_new_eq:NN \__driver_box_rotate_end: \__driver_state_restore:
-\cs_new_protected_nopar:Npn \__driver_box_scale_begin:
+\fp_new:N \l__driver_cos_fp
+\fp_new:N \l__driver_sin_fp
+\cs_new_protected:Npn \__driver_box_use_scale:Nnn #1#2#3
{
- \__driver_state_save:
- \fp_set:Nn \l__box_scale_x_fp { round ( \l__box_scale_x_fp , 5 ) }
- \fp_set:Nn \l__box_scale_y_fp { round ( \l__box_scale_y_fp , 5 ) }
+ \__driver_scope_begin:
\__driver_matrix:n
{
- \fp_use:N \l__box_scale_x_fp \c_space_tl
+ \fp_eval:n { round ( #2 , 5 ) } ~
0~0~
- \fp_use:N \l__box_scale_y_fp
+ \fp_eval:n { round ( #3 , 5 ) }
}
- }
-\cs_new_eq:NN \__driver_box_scale_end: \__driver_state_restore:
-\tl_new:N \l__driver_current_color_tl
-\tl_set:Nn \l__driver_current_color_tl { 0~g~0~G }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- { \tl_set:Nn \l__driver_current_color_tl { \current@color } }
- { }
- }
-\int_new:N \l__driver_color_stack_int
-\cs_new_protected_nopar:Npx \__driver_color_ensure_current:
- {
- \cs_if_exist:NTF \luatex_pdfextension:D
- { \luatex_pdfextension:D colorstack }
- { \pdftex_pdfcolorstack:D }
- \exp_not:N \l__driver_color_stack_int push
- { \exp_not:N \l__driver_current_color_tl }
- \group_insert_after:N \exp_not:N \__driver_color_reset:
- }
-\cs_new_protected_nopar:Npx \__driver_color_reset:
- {
- \cs_if_exist:NTF \luatex_pdfextension:D
- { \luatex_pdfextension:D colorstack }
- { \pdftex_pdfcolorstack:D }
- \exp_not:N \l__driver_color_stack_int pop \scan_stop:
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \__driver_scope_end:
}
%%
%%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
index 50fa2f3fca0..6778d6255a4 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
@@ -46,22 +46,52 @@
%%
%% -----------------------------------------------------------------------
%%
-\GetIdInfo$Id: l3drivers.dtx 6472 2016-04-05 13:26:17Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 6494 2016-05-14 21:10:56Z joseph $
{L3 Experimental drivers}
\ProvidesExplFile
{l3xdvidpfmx.def}{\ExplFileDate}{\ExplFileVersion}
{L3 Experimental driver: xdvipdfmx}
-\cs_new_protected_nopar:Npx \__driver_state_save:
- { \tex_special:D { pdf:literal~q } }
-\cs_new_protected_nopar:Npx \__driver_state_restore:
- { \tex_special:D { pdf:literal~Q } }
-\cs_new_protected:Npx \__driver_literal:n #1
+\cs_new_protected:Npn \__driver_literal:n #1
{ \tex_special:D { pdf:literal~ #1 } }
-\cs_new_protected:Npx \__driver_matrix:n #1
+\cs_new_protected_nopar:Npn \__driver_scope_begin:
+ { \__driver_literal:n { q } }
+\cs_new_protected_nopar:Npn \__driver_scope_end:
+ { \__driver_literal:n { Q } }
+\cs_new_protected:Npn \__driver_matrix:n #1
{ \__driver_literal:n { #1 \c_space_tl 0~0~cm } }
+\tl_new:N \l__driver_current_color_tl
+\tl_set:Nn \l__driver_current_color_tl { [ 0 ] }
+\AtBeginDocument
+ {
+ \@ifpackageloaded { color }
+ { \tl_set:Nn \l__driver_current_color_tl { \current@color } }
+ { }
+ }
+\cs_new_protected_nopar:Npx \__driver_color_ensure_current:
+ {
+ \tex_special:D { pdf:bcolor~\l__driver_current_color_tl }
+ \group_insert_after:N \exp_not:N \__driver_color_reset:
+ }
+\cs_new_protected_nopar:Npx \__driver_color_reset:
+ { \tex_special:D { pdf:ecolor } }
+\AtBeginDocument
+ {
+ \@ifpackageloaded { color }
+ {
+ \cs_set_protected_nopar:Npn \__driver_color_ensure_current:
+ {
+ \tex_special:D { color~push~\l__driver_current_color_tl }
+ \group_insert_after:N \exp_not:N \__driver_color_reset:
+ }
+
+ \cs_set_protected_nopar:Npn \__driver_color_reset:
+ { \tex_special:D { color~pop } }
+ }
+ { }
+ }
\cs_new_protected:Npn \__driver_box_use_clip:N #1
{
- \__driver_state_save:
+ \__driver_scope_begin:
\__driver_literal:n
{
0~
@@ -71,60 +101,47 @@
re~W~n
}
\hbox_overlap_right:n { \box_use:N #1 }
- \__driver_state_restore:
+ \__driver_scope_end:
\skip_horizontal:n { \box_wd:N #1 }
}
-\cs_new_protected_nopar:Npn \__driver_box_rotate_begin:
+\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
{
- \__driver_state_save:
- \box_set_wd:Nn \l__box_internal_box \c_zero_dim
- \fp_set:Nn \l__box_cos_fp { round ( \l__box_cos_fp , 5 ) }
- \fp_compare:nNnT \l__box_cos_fp = \c_zero_fp
- { \fp_zero:N \l__box_cos_fp }
- \fp_set:Nn \l__box_sin_fp { round ( \l__box_sin_fp , 5 ) }
+ \__driver_scope_begin:
+ \box_set_wd:Nn #1 \c_zero_dim
+ \fp_set:Nn \l__driver_cos_fp { round ( cosd ( #2 ) , 5 ) }
+ \fp_compare:nNnT \l__driver_cos_fp = \c_zero_fp
+ { \fp_zero:N \l__driver_cos_fp }
+ \fp_set:Nn \l__driver_sin_fp { round ( sind ( #2 ) , 5 ) }
\__driver_matrix:n
{
- \fp_use:N \l__box_cos_fp \c_space_tl
- \fp_compare:nNnTF \l__box_sin_fp = \c_zero_fp
+ \fp_use:N \l__driver_cos_fp \c_space_tl
+ \fp_compare:nNnTF \l__driver_sin_fp = \c_zero_fp
{ 0~0 }
{
- \fp_use:N \l__box_sin_fp
+ \fp_use:N \l__driver_sin_fp
\c_space_tl
- \fp_eval:n { -\l__box_sin_fp }
+ \fp_eval:n { -\l__driver_sin_fp }
}
\c_space_tl
- \fp_use:N \l__box_cos_fp
+ \fp_use:N \l__driver_cos_fp
}
+ \box_use:N #1
+ \__driver_scope_end:
}
-\cs_new_eq:NN \__driver_box_rotate_end: \__driver_state_restore:
-\cs_new_protected_nopar:Npn \__driver_box_scale_begin:
+\fp_new:N \l__driver_cos_fp
+\fp_new:N \l__driver_sin_fp
+\cs_new_protected:Npn \__driver_box_use_scale:Nnn #1#2#3
{
- \__driver_state_save:
- \fp_set:Nn \l__box_scale_x_fp { round ( \l__box_scale_x_fp , 5 ) }
- \fp_set:Nn \l__box_scale_y_fp { round ( \l__box_scale_y_fp , 5 ) }
+ \__driver_scope_begin:
\__driver_matrix:n
{
- \fp_use:N \l__box_scale_x_fp \c_space_tl
+ \fp_eval:n { round ( #2 , 5 ) } ~
0~0~
- \fp_use:N \l__box_scale_y_fp
+ \fp_eval:n { round ( #3 , 5 ) }
}
+ \hbox_overlap_right:n { \box_use:N #1 }
+ \__driver_scope_end:
}
-\cs_new_eq:NN \__driver_box_scale_end: \__driver_state_restore:
-\tl_new:N \l__driver_current_color_tl
-\tl_set:Nn \l__driver_current_color_tl { gray~0 }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- { \tl_set:Nn \l__driver_current_color_tl { \current@color } }
- { }
- }
-\cs_new_protected_nopar:Npx \__driver_color_ensure_current:
- {
- \tex_special:D { color~push~\exp_not:N \l__driver_current_color_tl }
- \group_insert_after:N \exp_not:N \__driver_color_reset:
- }
-\cs_new_protected_nopar:Npx \__driver_color_reset:
- { \tex_special:D { color~pop } }
%%
%%
%% End of file `l3xdvipdfmx.def'.
diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
index b3641934596..8826b78dd32 100644
--- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
@@ -46,8 +46,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{l3keys2e}{Support package l3kernel too old}
@@ -61,8 +61,8 @@
}
\def\ExplFileName{l3keys2e}
\def\ExplFileDescription{LaTeX2e option processing using LaTeX3 keys}
-\def\ExplFileDate{2016/04/20}
-\def\ExplFileVersion{6476}
+\def\ExplFileDate{2016/05/14}
+\def\ExplFileVersion{6495}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\cs_generate_variant:Nn \clist_put_right:Nn { Nv }
diff --git a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
index 74818d1b55a..1a02643a795 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
@@ -47,8 +47,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{xfrac}{Support package l3kernel too old}
@@ -63,8 +63,8 @@
\RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
\def\ExplFileName{xfrac}
\def\ExplFileDescription{L3 Experimental split-level fractions}
-\def\ExplFileDate{2016/04/20}
-\def\ExplFileVersion{6476}
+\def\ExplFileDate{2016/05/14}
+\def\ExplFileVersion{6495}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\keys_define:nn { xfrac }
diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
index 05f8d8910be..8eed3998b70 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
@@ -50,8 +50,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{xparse}{Support package l3kernel too old}
@@ -65,8 +65,8 @@
}
\def\ExplFileName{xparse}
\def\ExplFileDescription{L3 Experimental document command parser}
-\def\ExplFileDate{2016/04/20}
-\def\ExplFileVersion{6476}
+\def\ExplFileDate{2016/05/14}
+\def\ExplFileVersion{6495}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\tl_const:Nx \c__xparse_no_value_tl
diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
index b54dc121a6d..79b1fc19cd1 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
@@ -50,8 +50,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2016/04/20]
-\@ifpackagelater{expl3}{2016/04/20}
+\RequirePackage{expl3}[2016/05/14]
+\@ifpackagelater{expl3}{2016/05/14}
{}
{%
\PackageError{xtemplate}{Support package l3kernel too old}
@@ -65,8 +65,8 @@
}
\def\ExplFileName{xtemplate}
\def\ExplFileDescription{L3 Experimental prototype document functions}
-\def\ExplFileDate{2016/04/20}
-\def\ExplFileVersion{6476}
+\def\ExplFileDate{2016/05/14}
+\def\ExplFileVersion{6495}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\tl_const:Nn \c__xtemplate_code_root_tl { template~code~>~ }