From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 .../latex/contrib/l3experimental/l3draw-state.dtx  | 205 +++++++++++++++++++++
 1 file changed, 205 insertions(+)
 create mode 100644 macros/latex/contrib/l3experimental/l3draw-state.dtx

(limited to 'macros/latex/contrib/l3experimental/l3draw-state.dtx')

diff --git a/macros/latex/contrib/l3experimental/l3draw-state.dtx b/macros/latex/contrib/l3experimental/l3draw-state.dtx
new file mode 100644
index 0000000000..e0718ef4d9
--- /dev/null
+++ b/macros/latex/contrib/l3experimental/l3draw-state.dtx
@@ -0,0 +1,205 @@
+% \iffalse meta-comment
+%
+%% File: l3draw-state.dtx
+%
+% Copyright (C) 2018,2019 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version.  The latest version
+% of this license is in the file
+%
+%    http://www.latex-project.org/lppl.txt
+%
+% This file is part of the "l3experimental bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+%    https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver>
+\RequirePackage{expl3}
+\documentclass[full]{l3doc}
+\begin{document}
+  \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+%   The \pkg{l3draw-state} package\\ Drawing graphics state^^A
+% }
+%
+% \author{^^A
+%  The \LaTeX3 Project\thanks
+%    {^^A
+%      E-mail:
+%        \href{mailto:latex-team@latex-project.org}
+%          {latex-team@latex-project.org}^^A
+%    }^^A
+% }
+%
+% \date{Released 2019-08-25}
+%
+% \maketitle
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3draw-state} implementation}
+%
+%    \begin{macrocode}
+%<*initex|package>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<@@=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.
+%    \begin{macrocode}
+\dim_new:N \g_@@_linewidth_dim
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_draw_default_linewidth_dim}
+%   A default: this is used at the start of every drawing.
+%    \begin{macrocode}
+\dim_new:N \l_draw_default_linewidth_dim
+\dim_set:Nn \l_draw_default_linewidth_dim { 0.4pt }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\draw_linewidth:n}
+%   Set the linewidth: we need a wrapper as this has to pass to the driver
+%   layer.
+%    \begin{macrocode}
+\cs_new_protected:Npn \draw_linewidth:n #1
+  {
+    \dim_gset:Nn \g_@@_linewidth_dim { \fp_to_dim:n {#1} }
+    \@@_backend_linewidth:n \g_@@_linewidth_dim
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\draw_dash_pattern:nn}
+% \begin{variable}{\l_@@_tmp_seq}
+%   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:
+      \seq_set_from_clist:Nn \l_@@_tmp_seq {#1}
+      \seq_set_map:NNn \l_@@_tmp_seq \l_@@_tmp_seq
+        { \fp_to_dim:n {##1} }
+      \use:x
+        {
+          \@@_backend_dash_pattern:nn
+            { \seq_use:Nn \l_@@_tmp_seq { , } }
+            { \fp_to_dim:n {#2} }
+        }
+    \group_end:
+  }
+\seq_new:N \l_@@_tmp_seq
+%    \end{macrocode}
+% \end{variable}
+% \end{macro}
+%
+% \begin{macro}{\draw_miterlimit:n}
+%   Pass through to the driver layer.
+%    \begin{macrocode}
+\cs_new_protected:Npn \draw_miterlimit:n #1
+  { \@@_backend_miterlimit:n { \fp_eval:n {#1} } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     \draw_cap_butt:, \draw_cap_rectangle:, \draw_cap_round:,
+%     \draw_evenodd_rule:, \draw_nonzero_rule:,
+%     \draw_join_bevel:, \draw_join_miter:, \draw_join_round:
+%   }
+%   All straight wrappers.
+%    \begin{macrocode}
+\cs_new_protected:Npn \draw_cap_butt: { \@@_backend_cap_butt: }
+\cs_new_protected:Npn \draw_cap_rectangle: { \@@_backend_cap_rectangle: }
+\cs_new_protected:Npn \draw_cap_round: { \@@_backend_cap_round: }
+\cs_new_protected:Npn \draw_evenodd_rule: { \@@_backend_evenodd_rule: }
+\cs_new_protected:Npn \draw_nonzero_rule: { \@@_backend_nonzero_rule: }
+\cs_new_protected:Npn \draw_join_bevel: { \@@_backend_join_bevel: }
+\cs_new_protected:Npn \draw_join_miter: { \@@_backend_join_miter: }
+\cs_new_protected:Npn \draw_join_round: { \@@_backend_join_round: }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_color_tmp_tl}
+%   Scratch space.
+%    \begin{macrocode}
+\tl_new:N \l_@@_color_tmp_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\draw_color:n, \draw_color_fill:n, \draw_color_stroke:n}
+% \begin{macro}{\@@_color:nn}
+% \begin{macro}{\@@_color_aux:nn, \@@_color_aux:Vn}
+% \begin{macro}{\@@_color:nw}
+% \begin{macro}
+%   {
+%     \@@_select_cmyk:nw, \@@_select_gray:nw,
+%     \@@_select_rgb:nw, \@@_split_select:nw
+%   }
+%   Much the same as for core color support but calling the relevant
+%   driver-level function.
+%    \begin{macrocode}
+\cs_new_eq:NN \draw_color:n \color_select:n
+\cs_new_protected:Npn \draw_color_fill:n #1
+  { \@@_color:nn { fill } {#1} }
+\cs_new_protected:Npn \draw_color_stroke:n #1
+  { \@@_color:nn { stroke } {#1} }
+\cs_new_protected:Npn \@@_color:nn #1#2
+  {
+    \color_parse:nN {#2} \l_@@_color_tmp_tl
+    \@@_color_aux:Vn \l_@@_color_tmp_tl {#1}
+  }
+\cs_new_protected:Npn \@@_color_aux:nn #1#2
+  { \@@_color:nw {#2} #1 \q_stop }
+\cs_generate_variant:Nn \@@_color_aux:nn { V }
+\cs_new_protected:Npn \@@_color:nw #1#2 ~ #3 \q_stop
+  { \use:c { @@_color_ #2 :nw } {#1} #3 \q_stop }
+\cs_new_protected:Npn \@@_color_cmyk:nw #1#2 ~ #3 ~ #4 ~ #5 \q_stop
+  { \use:c { @@_backend_color_ #1 _cmyk:nnnn } {#2} {#3} {#4} {#5} }
+\cs_new_protected:Npn \@@_color_gray:nw #1#2 \q_stop
+  { \use:c { @@_backend_color_ #1 _gray:n } {#2} }
+\cs_new_protected:Npn \@@_color_rgb:nw #1#2 ~ #3 ~ #4 \q_stop
+  { \use:c { @@_backend_color_ #1 _rgb:nnn } {#2} {#3} {#4} }
+\cs_new_protected:Npn \@@_color_spot:nw #1#2 ~ #3 \q_stop
+  { \use:c { @@_backend_color_ #1 _spot:nn } {#2} {#3} }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</initex|package>
+%    \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex
-- 
cgit v1.2.3

