From c7a957f8a01dcbf3044f8b574145bc1085c7fbaa Mon Sep 17 00:00:00 2001 From: Joseph Wright Date: Thu, 8 Mar 2018 21:47:46 +0000 Subject: [PATCH] Add dash patterns to drawings This rounds out l3draw-scope, at least until inner lines are sorted out. --- l3experimental/l3draw/l3draw-state.dtx | 36 ++++++++++ l3experimental/l3draw/l3draw.dtx | 38 ++++++++++ l3experimental/l3draw/testfiles/m3draw004.lvt | 6 ++ .../l3draw/testfiles/m3draw004.ptex.tlg | 70 +++++++++++++++++-- l3experimental/l3draw/testfiles/m3draw004.tlg | 70 +++++++++++++++++-- .../l3draw/testfiles/m3draw004.uptex.tlg | 70 +++++++++++++++++-- .../l3draw/testfiles/m3draw004.xetex.tlg | 70 +++++++++++++++++-- 7 files changed, 336 insertions(+), 24 deletions(-) diff --git a/l3experimental/l3draw/l3draw-state.dtx b/l3experimental/l3draw/l3draw-state.dtx index 6c1438ed15..8d7f4d7c22 100644 --- a/l3experimental/l3draw/l3draw-state.dtx +++ b/l3experimental/l3draw/l3draw-state.dtx @@ -58,6 +58,15 @@ %<@@=draw> % \end{macrocode} % +% This sub-module covers more-or-less the same ideas as +% \texttt{pgfcoregraphicstate.code.tex}. At present, equivalents of the +% following are currently absent: +% \begin{itemize} +% \item \cs{pgfsetinnerlinewidth}, \cs{pgfinnerlinewidth}, +% \cs{pgfsetinnerstrokecolor}, \cs{pgfsetinnerstrokecolor}: Likely to +% be added on further work is done on paths/stroking. +% \end{itemize} +% % \begin{variable}{\g_@@_linewidth_dim} % Linewidth for strokes: global as the scope for this relies on the graphics % state. The inner line width is used for places where two lines are used. @@ -86,6 +95,33 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\draw_dash_pattern:nn} +% \begin{variable}{\l_@@_tmp_clist} +% Evaluated all of the list and pass it to the driver layer. +% \begin{macrocode} +\cs_new_protected:Npn \draw_dash_pattern:nn #1#2 + { + \group_begin: + \clist_clear:N \l_@@_tmp_clist + \clist_map_inline:nn {#1} + { + \clist_put_right:Nx \l_@@_tmp_clist + { \fp_to_dim:n {##1} } + } + \clist_set:Nn \l_@@_tmp_clist {#1} + \use:x + { + \driver_draw_dash_pattern:nn + { \clist_use:Nnnn \l_@@_tmp_clist { , } { , } { , } } + { \fp_to_dim:n {#2} } + } + \group_end: + } +\clist_new:N \l_@@_tmp_clist +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macro}{\draw_miterlimit:n} % Pass through to the driver layer. % \begin{macrocode} diff --git a/l3experimental/l3draw/l3draw.dtx b/l3experimental/l3draw/l3draw.dtx index 12a3fb9545..fa6c879ab4 100644 --- a/l3experimental/l3draw/l3draw.dtx +++ b/l3experimental/l3draw/l3draw.dtx @@ -226,6 +226,44 @@ % \meta{fp expr}). % \end{function} % +% \begin{function}{\draw_dash_pattern:nn} +% \begin{syntax} +% \cs{draw_dash_pattern:nn} \Arg{pattern} \Arg{phase} +% \end{syntax} +% Specifies a dash pattern. The \meta{pattern} itself is a comma-separated +% list of entries which represent the \enquote{on} and \enquote{off} +% parts of the line. These are all \meta{fp expr} and repeat as required. +% Thus the \meta{pattern} may be of arbitrary length. The \meta{phase} +% specifies where during the first \enquote{on} line the pattern should +% start. +% \begin{demo} +% \draw_begin: +% \draw_dash_pattern:nn +% { 0.5cm , 0.5cm , 0.1cm , 0.2cm } +% { 0cm } +% \draw_path_moveto:n { 0cm , 0cm } +% \draw_path_lineto:n { 2cm , 0cm } +% \draw_path_use_clear:n { stroke } +% \draw_dash_pattern:nn +% { 0.5cm , 0.5cm , 0.1cm , 0.2cm } +% { 0.1cm } +% \draw_path_moveto:n { 0cm , 1mm } +% \draw_path_lineto:n { 2cm , 1mm } +% \draw_path_use_clear:n { stroke } +% \draw_dash_pattern:nn +% { 0.5cm , 0.5cm , 0.1cm , 0.2cm } +% { 0.2cm } +% \draw_path_moveto:n { 0cm , 2mm } +% \draw_path_lineto:n { 2cm , 2mm } +% \draw_path_use_clear:n { stroke } +% \draw_end: +% \end{demo} +% Setting an empty pattern will produce a solid line. +% +% Note the \meta{pattern} interface here is different from that in \pkg{pgf}: +% the list is comma-separated not given in brace groups. +% \end{function} +% % \begin{function}{\draw_nonzero_rule:, \draw_evenodd_rule:} % \begin{syntax} % \cs{draw_nonzero_rule:} diff --git a/l3experimental/l3draw/testfiles/m3draw004.lvt b/l3experimental/l3draw/testfiles/m3draw004.lvt index 9d1bb5ee12..932213eba9 100644 --- a/l3experimental/l3draw/testfiles/m3draw004.lvt +++ b/l3experimental/l3draw/testfiles/m3draw004.lvt @@ -44,6 +44,12 @@ \test:n { \draw_linewidth:n { 1pt } } } +\TEST { \draw_dash_pattern:nn } + { + \test:n { \draw_dash_pattern:nn { } { 0 } } + \test:n { \draw_dash_pattern:nn { 0.2cm , 0.2cm } { 0 } } + \test:n { \draw_dash_pattern:nn { 0.2cm , 0.2cm } { 0.1cm } } + } \TEST { \draw_cap_... } { diff --git a/l3experimental/l3draw/testfiles/m3draw004.ptex.tlg b/l3experimental/l3draw/testfiles/m3draw004.ptex.tlg index d66363a8e7..5b4e9f4982 100644 --- a/l3experimental/l3draw/testfiles/m3draw004.ptex.tlg +++ b/l3experimental/l3draw/testfiles/m3draw004.ptex.tlg @@ -61,7 +61,65 @@ TEST 2: \draw_linewidth:n l. ... } ============================================================ ============================================================ -TEST 3: \draw_cap_ ... +TEST 3: \draw_dash_pattern:nn +============================================================ +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [] 0 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [5.6692 5.6692] 0 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [5.6692 5.6692] 2.83464 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +============================================================ +============================================================ +TEST 4: \draw_cap_ ... ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -119,7 +177,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 4: \draw_join_ ... +TEST 5: \draw_join_ ... ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -177,7 +235,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 5: \draw_miterlimit:n +TEST 6: \draw_miterlimit:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -235,7 +293,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 6: \draw_color:n +TEST 7: \draw_color:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -285,7 +343,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 7: \draw_color_fill:n +TEST 8: \draw_color_fill:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -313,7 +371,7 @@ TEST 7: \draw_color_fill:n l. ... } ============================================================ ============================================================ -TEST 8: \draw_color_stroke:n +TEST 9: \draw_color_stroke:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 diff --git a/l3experimental/l3draw/testfiles/m3draw004.tlg b/l3experimental/l3draw/testfiles/m3draw004.tlg index 7250697cd3..90efd75cc7 100644 --- a/l3experimental/l3draw/testfiles/m3draw004.tlg +++ b/l3experimental/l3draw/testfiles/m3draw004.tlg @@ -61,7 +61,65 @@ TEST 2: \draw_linewidth:n l. ... } ============================================================ ============================================================ -TEST 3: \draw_cap_ ... +TEST 3: \draw_dash_pattern:nn +============================================================ +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\pdfsave +...\pdfliteral{0.3985 w} +...\pdfcolorstack 0 push {0 g 0 G} +...\pdfliteral{[] 0 d} +...\pdfliteral{0 0 m} +...\pdfliteral{28.34647 283.46457 l} +...\pdfliteral{56.69292 0 l} +...\pdfliteral{S} +...\pdfrestore +...\pdfcolorstack 0 pop +! OK. + \l_tmpa_box +l. ... } +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\pdfsave +...\pdfliteral{0.3985 w} +...\pdfcolorstack 0 push {0 g 0 G} +...\pdfliteral{[5.6692 5.6692] 0 d} +...\pdfliteral{0 0 m} +...\pdfliteral{28.34647 283.46457 l} +...\pdfliteral{56.69292 0 l} +...\pdfliteral{S} +...\pdfrestore +...\pdfcolorstack 0 pop +! OK. + \l_tmpa_box +l. ... } +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\pdfsave +...\pdfliteral{0.3985 w} +...\pdfcolorstack 0 push {0 g 0 G} +...\pdfliteral{[5.6692 5.6692] 2.83464 d} +...\pdfliteral{0 0 m} +...\pdfliteral{28.34647 283.46457 l} +...\pdfliteral{56.69292 0 l} +...\pdfliteral{S} +...\pdfrestore +...\pdfcolorstack 0 pop +! OK. + \l_tmpa_box +l. ... } +============================================================ +============================================================ +TEST 4: \draw_cap_ ... ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -119,7 +177,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 4: \draw_join_ ... +TEST 5: \draw_join_ ... ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -177,7 +235,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 5: \draw_miterlimit:n +TEST 6: \draw_miterlimit:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -235,7 +293,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 6: \draw_color:n +TEST 7: \draw_color:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -285,7 +343,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 7: \draw_color_fill:n +TEST 8: \draw_color_fill:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -316,7 +374,7 @@ TEST 7: \draw_color_fill:n l. ... } ============================================================ ============================================================ -TEST 8: \draw_color_stroke:n +TEST 9: \draw_color_stroke:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 diff --git a/l3experimental/l3draw/testfiles/m3draw004.uptex.tlg b/l3experimental/l3draw/testfiles/m3draw004.uptex.tlg index d66363a8e7..5b4e9f4982 100644 --- a/l3experimental/l3draw/testfiles/m3draw004.uptex.tlg +++ b/l3experimental/l3draw/testfiles/m3draw004.uptex.tlg @@ -61,7 +61,65 @@ TEST 2: \draw_linewidth:n l. ... } ============================================================ ============================================================ -TEST 3: \draw_cap_ ... +TEST 3: \draw_dash_pattern:nn +============================================================ +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [] 0 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [5.6692 5.6692] 0 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [5.6692 5.6692] 2.83464 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +============================================================ +============================================================ +TEST 4: \draw_cap_ ... ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -119,7 +177,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 4: \draw_join_ ... +TEST 5: \draw_join_ ... ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -177,7 +235,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 5: \draw_miterlimit:n +TEST 6: \draw_miterlimit:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -235,7 +293,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 6: \draw_color:n +TEST 7: \draw_color:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -285,7 +343,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 7: \draw_color_fill:n +TEST 8: \draw_color_fill:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -313,7 +371,7 @@ TEST 7: \draw_color_fill:n l. ... } ============================================================ ============================================================ -TEST 8: \draw_color_stroke:n +TEST 9: \draw_color_stroke:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 diff --git a/l3experimental/l3draw/testfiles/m3draw004.xetex.tlg b/l3experimental/l3draw/testfiles/m3draw004.xetex.tlg index d66363a8e7..5b4e9f4982 100644 --- a/l3experimental/l3draw/testfiles/m3draw004.xetex.tlg +++ b/l3experimental/l3draw/testfiles/m3draw004.xetex.tlg @@ -61,7 +61,65 @@ TEST 2: \draw_linewidth:n l. ... } ============================================================ ============================================================ -TEST 3: \draw_cap_ ... +TEST 3: \draw_dash_pattern:nn +============================================================ +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [] 0 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [5.6692 5.6692] 0 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +> \box...= +\hbox(284.92755+0.0)x57.30551 +.\hbox(284.92755+0.0)x57.30551 +..\glue 0.2 +..\hbox(0.0+0.0)x0.0, shifted -0.2 +...\special{x:gsave} +...\special{pdf:literal 0.3985 w} +...\special{color push gray 0} +...\special{pdf:literal [5.6692 5.6692] 2.83464 d} +...\special{pdf:literal 0 0 m} +...\special{pdf:literal 28.34647 283.46457 l} +...\special{pdf:literal 56.69292 0 l} +...\special{pdf:literal S} +...\special{x:grestore} +...\special{color pop} +! OK. + \l_tmpa_box +l. ... } +============================================================ +============================================================ +TEST 4: \draw_cap_ ... ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -119,7 +177,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 4: \draw_join_ ... +TEST 5: \draw_join_ ... ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -177,7 +235,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 5: \draw_miterlimit:n +TEST 6: \draw_miterlimit:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -235,7 +293,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 6: \draw_color:n +TEST 7: \draw_color:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -285,7 +343,7 @@ l. ... } l. ... } ============================================================ ============================================================ -TEST 7: \draw_color_fill:n +TEST 8: \draw_color_fill:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551 @@ -313,7 +371,7 @@ TEST 7: \draw_color_fill:n l. ... } ============================================================ ============================================================ -TEST 8: \draw_color_stroke:n +TEST 9: \draw_color_stroke:n ============================================================ > \box...= \hbox(284.92755+0.0)x57.30551