From b91e52cdc7a9b971b1c0cf8ecef8eb10c9d8fdd9 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 19 Jan 2017 01:25:04 +0000
Subject: soup (18jan17)

git-svn-id: svn://tug.org/texlive/trunk@42992 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/soup/soup.sty | 462 ++++++++++++++++++++++++++++++
 1 file changed, 462 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/soup/soup.sty

(limited to 'Master/texmf-dist/tex/latex/soup/soup.sty')

diff --git a/Master/texmf-dist/tex/latex/soup/soup.sty b/Master/texmf-dist/tex/latex/soup/soup.sty
new file mode 100644
index 00000000000..d20a9b4618f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/soup/soup.sty
@@ -0,0 +1,462 @@
+%%
+%% This is file `soup.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% soup.dtx  (with options: `package')
+%%   This is a generated file.
+%%   Copyright (C) 2017 by Thomas Simers.
+%% 
+%%   This file may be distributed and/or modified under the
+%%   conditions of the LaTeX Project Public License, either
+%%   version 1.3 of this license or (at your option) any later
+%%   version.
+%% 
+%%   The latest version of this license is in:
+%%     http://www.latex-project.org/lppl.txt
+%%   and version 1.3 or later is part of all distributions of
+%%   LaTeX version 2005/12/01 or later.
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{soup}[2017/01/15 v1.0 Package for word search puzzles.]
+\RequirePackage{xparse}
+\RequirePackage{expl3}
+\RequirePackage{l3keys2e}
+\ExplSyntaxOn
+
+\msg_new:nnn{soup}{mismatch}{
+    Clue~mismatch~at~#1.~Will~appear~as~#2/#3~in~the~soup.
+}
+
+\bool_new:N \g_soup_use_tikz_bool
+\bool_gset_true:N \g_soup_use_tikz_bool
+
+\bool_new:N \g_soup_highlight_bool
+\bool_gset_false:N \g_soup_highlight_bool
+
+\tl_new:N \g_soup_highlight_color
+\tl_gset:Nn \g_soup_highlight_color {orange}
+
+\tl_new:N \g_soup_line_color
+\tl_gset:Nn \g_soup_line_color {red}
+
+\keys_define:nn { soup }{
+  highlightcolor .initial:n        = orange,
+  highlightcolor .value_required:n = true,
+  highlightcolor .code:n           = \tl_set:Nn \g_soup_highlight_color {#1},
+  linecolor      .initial:n        = red,
+  linecolor      .value_required:n = true,
+  linecolor      .code:n           = \tl_set:Nn \g_soup_line_color {#1},
+  highlight      .default:n        = true,
+  highlight      .bool_set:N       = \g_soup_highlight_bool,
+  usetikz        .default:n        = true,
+  usetikz        .bool_set:N       = \g_soup_use_tikz_bool,
+}
+
+\ProcessKeysPackageOptions{ soup }
+\IfBooleanT \g_soup_use_tikz_bool {
+    \RequirePackage{tikz}
+}
+\clist_const:Nn \c_soup_Alphabet_clist {
+    A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
+    E,T,A,O,H,N,I,S,R,D,L,U,W,M,C,G,F,Y,P,V,K,B,J,
+    E,T,A,O,H,N,I,S,R,D,L,U,W,M,C,G,F,Y,P,V,K,B,
+    E,T,A,O,H,N,I,S,R,D,L,U,W,M,
+    E,T,A,O,H,N,I,S,
+    E,T,A,O,H,
+}
+
+\clist_const:Nn \c_soup_alphabet_clist {
+    a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,
+    e,t,a,o,h,n,i,s,r,d,l,u,w,m,c,g,f,y,p,v,k,b,j,
+    e,t,a,o,h,n,i,s,r,d,l,u,w,m,c,g,f,y,p,v,k,b,
+    e,t,a,o,h,n,i,s,r,d,l,u,w,m,
+    e,t,a,o,h,n,i,s,
+    e,t,a,o,h,
+}
+
+\prop_new:N \g_soup_data_prop
+\seq_new:N \g_soup_clue_seq
+\cs_new:Nn \__soup_init:oo {
+    \clist_clear_new:N \g_soup_symbol_clist
+    \dim_gzero_new:N \g_soup_highlight_dim
+    \dim_gzero_new:N \g_soup_spacing_dim
+    \int_gzero_new:N \g_soup_columns_int
+    \int_gzero_new:N \g_soup_number_max_int
+    \int_gzero_new:N \g_soup_number_min_int
+    \int_gzero_new:N \g_soup_number_range_int
+    \int_gzero_new:N \g_soup_rows_int
+    \int_gzero_new:N \g_soup_symbol_count_int
+    \prop_clear_new:N \g_soup_data_prop
+    \seq_clear_new:N \g_soup_clue_seq
+    \seq_clear_new:N \g_soup_highlight_seq
+    \int_gset:Nn \g_soup_columns_int {#1}
+    \IfNoValueTF{#2} {
+       \int_gset:Nn \g_soup_rows_int {\g_soup_columns_int}
+    }{
+       \int_gset:Nn \g_soup_rows_int {#2}
+    }
+    \dim_gset:Nn \g_soup_spacing_dim {\textwidth / (\g_soup_columns_int + 1)}
+    \dim_gset:Nn \g_soup_highlight_dim {\g_soup_spacing_dim * 7 / 10}
+    \tl_clear_new:N \g_soup_font_tl
+    \tl_gset:Nn \g_soup_font_tl {\normalfont}
+}
+\int_gzero_new:N \g__soup_random_previous_int
+\int_gzero_new:N \g__soup_random_current_int
+\cs_new:Nn \__soup_random_int:nn {
+    \int_compare:nNnT \g__soup_random_previous_int = 0 {
+        \int_gset:Nn \g__soup_random_previous_int {\time}
+    }
+    % A = 16807,  Q = 127773 (M / A), R = 2836 (M % A), M = 2147483647 (2^31-1)
+    \int_zero_new:N \l__hi_int
+    \int_zero_new:N \l__lo_int
+    \int_set:Nn \l__hi_int {\g__soup_random_previous_int / 127773}
+    \int_set:Nn \l__lo_int {\int_mod:nn{\g__soup_random_previous_int}{127773}}
+    \int_gset:Nn \g__soup_random_previous_int {
+        16807 * \l__hi_int - 2836 * \l__lo_int
+    }
+    \int_compare:nNnT \g__soup_random_previous_int < 1 {
+        \int_gadd:Nn \g__soup_random_previous_int {2147483647}
+    }
+    \int_gset:Nn \g__soup_random_current_int {
+        #1 + \int_mod:nn{\g__soup_random_previous_int}{#2 - #1 + 1}
+    }
+}
+\cs_new:Nn \__soup_draw_nodes: {
+    \int_step_variable:nnnNn {1} {1} {\g_soup_columns_int} \l_tmpb_int {
+        \int_step_variable:nnnNn {1} {1} {\g_soup_rows_int} \l_tmpc_int {
+            \exp_args:Nnx
+            \prop_get:NnNTF \g_soup_data_prop {
+                (\l_tmpb_int,\l_tmpc_int)
+            } \l_tmpa_tl {
+                \node
+                    at (\l_tmpb_int,\l_tmpc_int)
+                    {\l_tmpa_tl};
+            }{
+                \node
+                    at (\l_tmpb_int,\l_tmpc_int)
+                    {\__soup_show_random_symbol:};
+            }
+        }
+    }
+}
+\cs_new:Nn \__soup_draw_highlights: {
+    \seq_map_inline:Nn \g_soup_highlight_seq {
+        \draw[
+            double=\g_soup_highlight_color,
+            double~distance=\g_soup_highlight_dim,
+            line~width=2pt,
+            color=\g_soup_line_color,
+            opacity=0.4,
+            line~cap=round
+        ] ##1;
+    }
+}
+\cs_new:Nn \__soup_draw_soup_tikz: {
+
+    \tikzset{
+        every~node/.style={
+            font=\g_soup_font_tl,
+        },
+    }
+    \begin{tikzpicture}[
+        x=\g_soup_spacing_dim,
+        y=-\g_soup_spacing_dim,
+    ]
+        \draw[rounded~corners=6pt, use~as~bounding~box]
+            (0.5,0)
+            ++(0,0.5) rectangle +(\g_soup_columns_int, \g_soup_rows_int);
+        \__soup_draw_highlights:
+        \__soup_draw_nodes:
+    \end{tikzpicture}
+}
+\cs_new:Nn \__soup_draw_soup_tabular: {
+    \dim_zero_new:N \l_soup_lineheight_dim
+    \dim_set:Nn \l_soup_lineheight_dim {\g_soup_spacing_dim - \baselineskip}
+
+    \vspace{0.25\g_soup_spacing_dim}\par
+    \noindent\fbox{\parbox[c][
+        \g_soup_rows_int\g_soup_spacing_dim
+    ][c]{\g_soup_columns_int\g_soup_spacing_dim}{
+    \begin{tabular*}{
+        \g_soup_columns_int\g_soup_spacing_dim
+    }{
+        @{\extracolsep{\fill}}
+        *{\g_soup_columns_int}{c}
+    }
+        \int_step_inline:nnnn {1} {1} {\g_soup_rows_int } {
+            \int_gset:Nn \g_tmpa_int {##1}
+            \int_step_variable:nnnNn {1} {1} {\g_soup_columns_int} \l_tmpb_int {
+                \exp_args:Nnx
+                \prop_get:NnNTF \g_soup_data_prop {
+                    (\l_tmpb_int,\the\g_tmpa_int)
+                } \l_tmpa_tl {
+                    \g_soup_font_tl
+                    \IfBooleanTF{\g_soup_highlight_bool}{
+                        {\bfseries\l_tmpa_tl}
+                    }{
+                        \l_tmpa_tl
+                    }
+                }{
+                    \g_soup_font_tl\__soup_show_random_symbol:
+                }
+                \int_compare:nNnT \l_tmpb_int < \g_soup_columns_int {
+                    &
+                }
+            }
+            \int_compare:nNnTF \g_tmpa_int < \g_soup_rows_int {
+                \\[\l_soup_lineheight_dim]
+            }{
+            }
+        }
+    \end{tabular*}
+    }
+    }
+}
+\cs_new:Nn \__soup_show_random_symbol: {
+    \int_compare:nNnTF \g_soup_symbol_count_int = 0 {
+        \__soup_random_int:nn {\g_soup_number_min_int}{\g_soup_number_max_int}
+        \the\g__soup_random_current_int
+    }{
+        \__soup_random_int:nn {1}{\g_soup_symbol_count_int}
+        \clist_item:Nn \g_soup_symbol_clist {\g__soup_random_current_int}
+    }
+}
+\NewDocumentCommand \listofclues { +o } {
+    \tl_clear_new:N \theclue
+    \IfNoValueTF{#1}{
+        \tl_set:Nn \l_tmpa_tl {\theclue\par}
+    }{
+        \tl_set:Nn \l_tmpa_tl {#1}
+    }
+    \seq_map_variable:NNn \g_soup_clue_seq \theclue {
+        \l_tmpa_tl
+    }
+}
+\NewDocumentCommand \highlightinsoup { m m m m }{
+  \bool_if:NT \g_soup_highlight_bool {
+    \seq_gput_left:Nx \g_soup_highlight_seq {(#1, #2) -- (#3, #4)}
+  }
+}
+\NewDocumentCommand \hideinsoup { smmmmo } {
+    \int_zero_new:N \l__soup_dx_int
+    \int_zero_new:N \l__soup_dy_int
+
+    \str_case:nn {#4} {
+        {left}{
+            \int_set:Nn \l__soup_dx_int {-1}
+            \int_set:Nn \l__soup_dy_int { 0}
+        }
+        {right}{
+            \int_set:Nn \l__soup_dx_int { 1}
+            \int_set:Nn \l__soup_dy_int { 0}
+        }
+        {up}{
+            \int_set:Nn \l__soup_dx_int { 0}
+            \int_set:Nn \l__soup_dy_int {-1}
+        }
+        {upleft}{
+            \int_set:Nn \l__soup_dx_int {-1}
+            \int_set:Nn \l__soup_dy_int {-1}
+        }
+        {upright}{
+            \int_set:Nn \l__soup_dx_int { 1}
+            \int_set:Nn \l__soup_dy_int {-1}
+        }
+        {down}{
+            \int_set:Nn \l__soup_dx_int { 0}
+            \int_set:Nn \l__soup_dy_int { 1}
+        }
+        {downleft}{
+            \int_set:Nn \l__soup_dx_int {-1}
+            \int_set:Nn \l__soup_dy_int { 1}
+        }
+        {downright}{
+            \int_set:Nn \l__soup_dx_int { 1}
+            \int_set:Nn \l__soup_dy_int { 1}
+        }
+    }
+
+    \clist_set:Nn \l__soup_clue_clist {#5}
+    \int_zero_new:N \l__soup_clue_count_int
+    \int_set:Nn \l__soup_clue_count_int {\clist_count:N \l__soup_clue_clist}
+
+    \int_zero_new:N \l__soup_cx_int
+    \int_zero_new:N \l__soup_cy_int
+    \tl_clear_new:N \l__soup_ci_tl
+    \tl_clear_new:N \l__soup_ch_tl
+    \tl_clear_new:N \l__soup_nn_tl
+
+    \int_step_variable:nnnNn {1} {1} {\l__soup_clue_count_int} \l__soup_ci_tl {
+        \int_set:Nn \l__soup_cx_int
+            {#2 + \l__soup_dx_int * (\l__soup_ci_tl - 1)}
+
+        \int_set:Nn \l__soup_cy_int
+            {#3 + \l__soup_dy_int * (\l__soup_ci_tl - 1)}
+
+        \exp_args:Nnx
+        \tl_set:Nn \l__soup_ch_tl
+            {\clist_item:Nn \l__soup_clue_clist {\l__soup_ci_tl}}
+
+        \exp_args:Nnx
+        \tl_set:Nn \l__soup_nn_tl
+            {(\the\l__soup_cx_int,\the\l__soup_cy_int)}
+
+        \exp_args:Nnx
+        \tl_set:Nn \l__soup_cv_tl
+            {\exp_args:Nno \prop_item:Nn \g_soup_data_prop \l__soup_nn_tl}
+
+        \str_if_empty:NTF \l__soup_cv_tl {
+            \exp_args:Nnx \prop_gput:Noo \g_soup_data_prop {
+                \l__soup_nn_tl
+            } {\l__soup_ch_tl}
+        }{
+            \str_if_eq:NNF \l__soup_cv_tl \l__soup_ch_tl {
+                \msg_warning:nnxxx{soup}{mismatch}{
+                    \l__soup_nn_tl
+                }{\l__soup_cv_tl}{\l__soup_ch_tl}
+
+                \tl_put_left:Nx \l__soup_ch_tl
+                    {\l__soup_cv_tl/}
+
+                \exp_args:Nnx
+                \prop_gput:Noo \g_soup_data_prop {\l__soup_nn_tl}
+                    {\l__soup_ch_tl}
+            }
+        }
+    }
+
+    \IfBooleanF{#1}{
+        \exp_args:Nnx
+        \int_set:Nn \l__soup_cx_int
+            {#2 + \l__soup_dx_int * (\l__soup_clue_count_int - 1)}
+
+        \exp_args:Nnx
+        \int_set:Nn \l__soup_cy_int
+            {#3 + \l__soup_dy_int * (\l__soup_clue_count_int - 1)}
+
+        \exp_args:Nnx
+        \tl_set:Nn \l__soup_nn_tl
+            {(\the\l__soup_cx_int,\the\l__soup_cy_int)}
+
+        \exp_args:Nnx
+        \seq_gput_left:Nx \g_soup_highlight_seq
+            {(#2, #3) -- \l__soup_nn_tl}
+    }
+    \IfNoValueF{#6}{
+        \seq_gput_left:No \g_soup_clue_seq {#6}
+    }
+}
+\NewDocumentEnvironment{alphabetsoup}{ sO{15}oo }
+{
+    \par\noindent
+    \__soup_init:oo {#2}{#3}
+    \IfBooleanTF{#1}{
+        \def\showlist{}
+    }{
+        \def\showlist{\par\vspace*{1em}\listofclues}
+    }
+    \IfNoValueF{#4}{
+        \tl_gset:Nn \g_soup_font_tl {#4}
+    }
+
+    \clist_gset_eq:NN \g_soup_symbol_clist
+        \c_soup_alphabet_clist
+
+    \int_gset:Nn \g_soup_symbol_count_int
+        {\clist_count:N \g_soup_symbol_clist}
+}{
+    \IfBooleanTF \g_soup_use_tikz_bool {
+        \__soup_draw_soup_tikz:
+    }{
+        \__soup_draw_soup_tabular:
+    }
+    \showlist
+}
+\NewDocumentEnvironment{Alphabetsoup}{ sO{15}oo }
+{
+    \par\noindent
+    \__soup_init:oo {#2}{#3}
+    \IfBooleanTF{#1}{
+        \def\showlist{}
+    }{
+        \def\showlist{\par\vspace*{1em}\listofclues}
+    }
+    \IfNoValueF{#4}{
+        \tl_gset:Nn \g_soup_font_tl {#4}
+    }
+
+    \clist_gset_eq:NN \g_soup_symbol_clist
+        \c_soup_Alphabet_clist
+
+    \int_gset:Nn \g_soup_symbol_count_int
+        {\clist_count:N \g_soup_symbol_clist}
+}{
+    \IfBooleanTF \g_soup_use_tikz_bool {
+        \__soup_draw_soup_tikz:
+    }{
+        \__soup_draw_soup_tabular:
+    }
+    \showlist
+}
+\NewDocumentEnvironment{homemadesoup}{ sO{15}omo }
+{
+    \par\noindent
+    \__soup_init:oo {#2}{#3}
+    \IfBooleanTF{#1}{
+        \def\showlist{}
+    }{
+        \def\showlist{\par\vspace*{1em}\listofclues}
+    }
+    \IfNoValueF{#5}{
+        \tl_gset:Nn \g_soup_font_tl {#5}
+    }
+
+    \clist_gset:Nn \g_soup_symbol_clist
+        {#4}
+
+    \int_gset:Nn \g_soup_symbol_count_int
+        {\clist_count:N \g_soup_symbol_clist}
+}
+{
+    \IfBooleanTF \g_soup_use_tikz_bool {
+        \__soup_draw_soup_tikz:
+    }{
+        \__soup_draw_soup_tabular:
+    }
+    \showlist
+}
+\NewDocumentEnvironment{numbersoup}{ sO{15}omO{0}o }
+{
+    \par\noindent
+    \__soup_init:oo{#2}{#3}
+    \IfBooleanTF{#1}{
+        \def\showlist{}
+    }{
+        \def\showlist{\par\vspace*{1em}\listofclues}
+    }
+    \IfNoValueF{#6}{
+        \tl_gset:Nn \g_soup_font_tl {#6}
+    }
+
+    \int_gset:Nn \g_soup_number_max_int
+        {#4}
+
+    \int_gset:Nn \g_soup_number_min_int
+        {#5}
+
+    \int_gset:Nn \g_soup_number_range_int
+        {\g_soup_number_max_int - \g_soup_number_min_int}
+}
+{
+    \IfBooleanTF \g_soup_use_tikz_bool {
+        \__soup_draw_soup_tikz:
+    }{
+        \__soup_draw_soup_tabular:
+    }
+    \showlist
+}
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `soup.sty'.
-- 
cgit v1.2.3

