summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/ducksay
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-09-21 21:06:08 +0000
committerKarl Berry <karl@freefriends.org>2018-09-21 21:06:08 +0000
commit0972697fc4429b971f75335c69d8a71b9999097e (patch)
tree6a2c508754362eee8c4e9be2f255da6f58d67529 /Master/texmf-dist/tex/latex/ducksay
parentc240d190fee85a0d263ff59264eaf1d7c5cdbdab (diff)
ducksay (21sep18)
git-svn-id: svn://tug.org/texlive/trunk@48720 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/ducksay')
-rw-r--r--Master/texmf-dist/tex/latex/ducksay/ducksay.sty631
1 files changed, 182 insertions, 449 deletions
diff --git a/Master/texmf-dist/tex/latex/ducksay/ducksay.sty b/Master/texmf-dist/tex/latex/ducksay/ducksay.sty
index 8282a35791c..b966fad7e29 100644
--- a/Master/texmf-dist/tex/latex/ducksay/ducksay.sty
+++ b/Master/texmf-dist/tex/latex/ducksay/ducksay.sty
@@ -1,471 +1,204 @@
-%% This package is distributed under the terms of the GPLv3 or later, or the
-%% LPPL 1.3c or later, which ever license fits your needs the best.
%%
-%% Copyright (C) 2017 by Jonathan P. Spratte
+%% This is file `ducksay.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ducksay.dtx (with options: `pkg')
+%%
+%% --------------------------------------------------------------
+%% ducksay -- cowsay for LaTeX
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% --------------------------------------------------------------
+%%
+%% Copyright (C) 2017-2018 Jonathan P. Spratte
+%%
+%% This work 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
+%%
+%% Alternatively you can use this work under the terms of the GNU General Public
+%% Licensce (GPL), version 3 or later, except that you might not redistribute it
+%% under the same name if you change its functionality. Choose which of these
+%% licenses fits your needs the best.
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the file ducksay.dtx
+%% and the derived files ducksay.pdf
+%% ducksay.sty
+%% ducksay.code.v1.tex
+%% ducksay.code.v2.tex and
+%% ducksay.animals.tex.
+%%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{xparse,l3keys2e}
-\def\ducksay@version{v1.2}
-\def\ducksay@date{2017/10/30}
+\def\ducksay@version{2.0}
+\def\ducksay@date{2018/09/21}
\ProvidesExplPackage
{ducksay} {\ducksay@date}
{\ducksay@version} {cowsay for LaTeX}
-\ExplSyntaxOn
-
-% variables>>>
-\int_new:N \l_ducksay_strlen_int
-\int_new:N \l_ducksay_lines_int
+\int_new:N \l_ducksay_msg_width_int
+\int_new:N \l_ducksay_msg_height_int
\seq_new:N \l_ducksay_msg_lines_seq
+\tl_new:N \l_ducksay_say_or_think_tl
\tl_new:N \l_ducksay_align_tl
\tl_new:N \l_ducksay_msg_align_tl
\tl_new:N \l_ducksay_animal_tl
-\bool_new:N \l_ducksay_empty_ligatures_bool
-\cs_new:Nn \ducksay_bubble: {}
-\cs_new:Nn \ducksay_body: {}
-\regex_new:N \l_ducksay_ligatures_regex
-%<<<
-
-% predefined regexes>>>
-% regexes for \duckthink >>>
+\tl_new:N \l_ducksay_body_tl
+\tl_new:N \l_ducksay_bubble_tl
+\tl_new:N \l_ducksay_tmpa_tl
+\bool_new:N \l_ducksay_also_add_think_bool
+\bool_new:N \l_ducksay_version_one_bool
+\bool_new:N \l_ducksay_version_two_bool
+\box_new:N \l_ducksay_tmpa_box
\regex_const:Nn \c_ducksay_first_regex { \A(.\s*)\\ }
\regex_const:Nn \c_ducksay_second_regex { \A(.[^\c{null}]*\c{null}\s*)\\ }
\regex_const:Nn \c_ducksay_third_regex {
\A(.[^\c{null}]*\c{null}[^\c{null}]*\c{null}\s*)\\ }
-%<<<
-% regexes for \AddAnimal >>>
-\regex_const:Nn \c_ducksay_newline_regex { \r }
-\regex_set:Nn \l_ducksay_ligatures_regex { [\-<>`] }
-%<<<
-%<<<
-
-\keys_define:nn { ducksay } {%>>>
- ,bubble .code:n = \cs_set:Nn \ducksay_bubble: {#1}
- ,body .code:n = \cs_set:Nn \ducksay_body: {#1}
- ,align .tl_set:N = \l_ducksay_align_tl
- ,align .value_required:n = true
- ,wd .int_set:N = \l_ducksay_strlen_int
- ,wd .value_required:n = true
- ,ht .int_set:N = \l_ducksay_lines_int
- ,ht .value_required:n = true
- ,animal .code:n = {
- \keys_define:nn { ducksay } { default_animal .meta:n = {#1} }}
- ,animal .initial:n = duck
- ,msg-align .tl_set:N = \l_ducksay_msg_align_tl
- ,msg-align .initial:n = l
- ,msg-align .value_required:n = true
- ,ligatures .code:n = {
- \tl_if_empty:nTF { #1 }
- { \bool_set_true:N \l_ducksay_empty_ligatures_bool }
- { \regex_set:Nn \l_ducksay_ligatures_regex { #1 } }
+\regex_const:Nn \c_ducksay_textcolor_regex
+ { \cO(?:\\textcolor\{(.*?)\}\{(.*?)\}) }
+\regex_const:Nn \c_ducksay_color_delim_regex
+ { \cO(?:\\bgroup\\color\{(.*?)\}(.*)\\egroup) }
+\regex_const:Nn \c_ducksay_color_regex
+ { \cO(?:\\color\{(.*?)\}) }
+\msg_new:nnn { ducksay } { load-time-only }
+ { The~`#1`~key~is~to~be~used~only~during~package~load~time. }
+\keys_define:nn { ducksay }
+ {
+ ,bubble .tl_set:N = \l_ducksay_bubble_tl
+ ,body .tl_set:N = \l_ducksay_body_tl
+ ,align .tl_set:N = \l_ducksay_align_tl
+ ,align .value_required:n = true
+ ,wd .int_set:N = \l_ducksay_msg_width_int
+ ,wd .initial:n = -\c_max_int
+ ,wd .value_required:n = true
+ ,ht .int_set:N = \l_ducksay_msg_height_int
+ ,ht .initial:n = -\c_max_int
+ ,ht .value_required:n = true
+ ,animal .code:n =
+ { \keys_define:nn { ducksay } { default_animal .meta:n = { #1 } } }
+ ,animal .initial:n = duck
+ ,msg-align .tl_set:N = \l_ducksay_msg_align_tl
+ ,msg-align .initial:n = l
+ ,msg-align .value_required:n = true
+ ,rel-align .tl_set:N = \l_ducksay_rel_align_tl
+ ,rel-align .initial:n = l
+ ,rel-align .value_required:n = true
+ ,ligatures .tl_set:N = \l_ducksay_ligatures_tl
+ ,ligatures .initial:n = { `<>,'- }
+ ,add-think .bool_set:N = \l_ducksay_also_add_think_bool
+ ,version .choice:
+ ,version / 1 .code:n =
+ {
+ \bool_set_false:N \l_ducksay_version_two_bool
+ \bool_set_true:N \l_ducksay_version_one_bool
+ }
+ ,version / 2 .code:n =
+ {
+ \bool_set_false:N \l_ducksay_version_one_bool
+ \bool_set_true:N \l_ducksay_version_two_bool
+ }
+ ,version .initial:n = 2
}
-}%<<<
-
\ProcessKeysOptions { ducksay }
-
-\cs_new:Nn \ducksay_longest_line:n {%>>>
- \int_incr:N \l_ducksay_lines_int
- \exp_args:NNx \tl_set:Nn \l_tmpa_tl { #1 }
- \regex_replace_all:nnN { \s } { \c{space} } \l_tmpa_tl
- \int_set:Nn \l_ducksay_strlen_int {
- \int_max:nn { \l_ducksay_strlen_int } { \tl_count:N \l_tmpa_tl } }
-}%<<<
-
-\cs_new:Nn \ducksay_open_bubble: {%>>>
- \begin{tabular}{@{}l@{}}
- \mbox{}\\
- \int_compare:nNnTF {\l_ducksay_lines_int} = {1} {
- (
- }{
- /
- \int_step_inline:nnnn {3}{1} {\l_ducksay_lines_int} {\\\kern-0.5ex|}
- \\\detokenize{\ }
- }
- \\[-1ex]\mbox{}
- \end{tabular}
- \begin{tabular}{@{}l@{}}
- _\\
- \int_step_inline:nnnn{2}{1}{\l_ducksay_lines_int}{\\}\\[-1ex]
- \mbox{-}
- \end{tabular}
-}%<<<
-
-\cs_new:Nn \ducksay_close_bubble: {%>>>
- \begin{tabular}{@{}l@{}}
- _\\
- \int_step_inline:nnnn{2}{1}{\l_ducksay_lines_int}{\\}\\[-1ex]
- {-}
- \end{tabular}
- \begin{tabular}{@{}r@{}}
- \mbox{}\\
- \int_compare:nNnTF {\l_ducksay_lines_int} = {1} {
- )
- }{
- \detokenize{\ }
- \int_step_inline:nnnn {3}{1}{\l_ducksay_lines_int} {\\|\kern-0.5ex}
- \\/
- }
- \\[-1ex]\mbox{}
- \end{tabular}
-}%<<<
-
-\cs_new:Nn \ducksay_print_msg:nn {%>>>
- \begin{tabular}{@{} #2 @{}}
- \int_step_inline:nnnn{1}{1}{\l_ducksay_strlen_int}{_}\\
- #1\\[-1ex]
- \int_step_inline:nnnn{1}{1}{\l_ducksay_strlen_int}{{-}}
- \end{tabular}
-}%<<<
-
-\cs_generate_variant:Nn \ducksay_print_msg:nn { nV }
-
-\cs_new:Nn \ducksay_print:n {%>>>
- \int_case:nnF { \l_ducksay_strlen_int }
- { { 0 } {
- \seq_set_split:Nnn \l_ducksay_msg_lines_seq {\\} { #1 }
- \seq_map_function:NN \l_ducksay_msg_lines_seq \ducksay_longest_line:n
- }}
- {
- \int_case:nn { \l_ducksay_lines_int }
- { { 0 } {
- \regex_count:nnN {\c{\\}} {#1} \l_ducksay_lines_int
- \int_incr:N \l_ducksay_lines_int
- }}
- }
- \group_begin:
- \frenchspacing
- \ttfamily
- \verbatim@font
- \@noligs
- \begin{tabular}[\l_ducksay_align_tl]{@{}l@{}}
- \ducksay_bubble:
- \begin{tabular}{@{}l@{}}
- \ducksay_open_bubble:
- \ducksay_print_msg:nV {#1} \l_ducksay_msg_align_tl
- \ducksay_close_bubble:
- \end{tabular}\\
- \ducksay_body:
- \begin{tabular}{@{}l@{}}
- \l_ducksay_animal_tl
- \end{tabular}
- \end{tabular}
- \group_end:
-}%<<<
-
-\cs_new:Nn \ducksay_prepare_say_and_think:n {%>>>
- \int_zero:N \l_ducksay_strlen_int
- \int_zero:N \l_ducksay_lines_int
- \keys_define:nn { ducksay } { animal .meta:n = { ##1 } }
- \keys_set:nn { ducksay } { default_animal,#1 }
-}%<<<
-
-\cs_new:Nn \ducksay_to_duckthink: {%>>>
- \regex_replace_once:NnN \c_ducksay_first_regex { \1O } \l_ducksay_animal_tl
- \regex_replace_once:NnN \c_ducksay_second_regex { \1o } \l_ducksay_animal_tl
- \regex_replace_once:NnN \c_ducksay_third_regex { \1o } \l_ducksay_animal_tl
-}%<<<
-
-\NewDocumentCommand{\ducksay}{ O{} m }{%>>>
- \group_begin:
- \ducksay_prepare_say_and_think:n { #1 }
- \ducksay_print:n { #2 }
- \group_end:
-}%<<<
-
-\NewDocumentCommand{\duckthink}{ O{} m }{%>>>
- \group_begin:
- \ducksay_prepare_say_and_think:n { #1 }
- \ducksay_to_duckthink:
- \ducksay_print:n { #2 }
- \group_end:
-}%<<<
-
-\NewDocumentCommand{\DefaultAnimal}{ m }{%>>>
- \keys_define:nn { ducksay } { default_animal .meta:n = {#1} }}%<<<
-
-\NewDocumentCommand{\DucksayOptions}{ m }{%>>>
- \keys_set:nn { ducksay } { #1 }}%<<<
-
-\NewDocumentCommand{\AddAnimal}{ s m +v }{%>>>
- \tl_set:Nn \l_tmpa_tl { \ #3 }
- \bool_if:NF \l_ducksay_empty_ligatures_bool {
- \regex_replace_all:NnN \l_ducksay_ligatures_regex { \c{mbox}\0 } \l_tmpa_tl
+\keys_define:nn { ducksay }
+ {
+ version .code:n = \msg_error:nnn { ducksay } { load-time-only } { version }
}
- \regex_replace_all:NnN \c_ducksay_newline_regex { \c{tabularnewline}\c{null} }
- \l_tmpa_tl
- \tl_gset_eq:cN { g_ducksay_animal_#2_tl } \l_tmpa_tl
- \keys_define:nn { ducksay } {
- #2 .code:n = \tl_set_eq:Nc \l_ducksay_animal_tl { g_ducksay_animal_#2_tl }
+\cs_generate_variant:Nn \tl_if_eq:nnT { VnT }
+\cs_new_protected:Npn \ducksay_create_think_animal:n #1
+ {
+ \group_begin:
+ \tl_set_eq:Nc \l_ducksay_tmpa_tl { g_ducksay_animal_say_#1_tl }
+ \regex_replace_once:NnN \c_ducksay_first_regex { \1O } \l_ducksay_tmpa_tl
+ \regex_replace_once:NnN \c_ducksay_second_regex { \1o } \l_ducksay_tmpa_tl
+ \regex_replace_once:NnN \c_ducksay_third_regex { \1o } \l_ducksay_tmpa_tl
+ \tl_gset_eq:cN { g_ducksay_animal_think_#1_tl } \l_ducksay_tmpa_tl
+ \group_end:
}
- \IfBooleanT{#1}{
- \keys_define:nn { ducksay } {
- default_animal .meta:n = {#2} }}
-}%<<<
-
+\cs_new_protected:Npx \ducksay_replace_verb_newline:Nn #1 #2
+ {
+ \tl_replace_all:Nnn #1 { \char_generate:nn { 13 } { 12 } } { #2 }
+ }
+\cs_new_protected:Npx \ducksay_replace_verb_newline_newline:Nn #1 #2
+ {
+ \tl_replace_all:Nnn #1
+ { \char_generate:nn { 13 } { 12 } \char_generate:nn { 13 } { 12 } } { #2 }
+ }
+\cs_new_protected:Npn \ducksay_process_verb_newline:nnn #1 #2 #3
+ {
+ \tl_set:Nn \ProcessedArgument { #3 }
+ \ducksay_replace_verb_newline_newline:Nn \ProcessedArgument { #2 }
+ \ducksay_replace_verb_newline:Nn \ProcessedArgument { #1 }
+ }
+\cs_new_protected:Npn \ducksay_add_animal_inner:nn #1 #2
+ {
+ \tl_set:Nn \l_ducksay_tmpa_tl { \ #2 }
+ \tl_map_inline:Nn \l_ducksay_ligatures_tl
+ { \tl_replace_all:Nnn \l_ducksay_tmpa_tl { ##1 } { { ##1 } } }
+ \ducksay_replace_verb_newline:Nn \l_ducksay_tmpa_tl { \tabularnewline\null }
+ \tl_gset_eq:cN { g_ducksay_animal_say_#1_tl } \l_ducksay_tmpa_tl
+ \keys_define:nn { ducksay }
+ {
+ #1 .code:n =
+ {
+ \tl_if_exist:cF
+ { g_ducksay_animal_ \l_ducksay_say_or_think_tl _#1_tl }
+ { \ducksay_create_think_animal:n { #1 } }
+ \tl_set_eq:Nc \l_ducksay_animal_tl
+ { g_ducksay_animal_ \l_ducksay_say_or_think_tl _#1_tl }
+ }
+ }
+ }
+\NewDocumentCommand \DefaultAnimal { m }
+ {
+ \keys_define:nn { ducksay } { default_animal .meta:n = { #1 } }
+ }
+\NewDocumentCommand \DucksayOptions { m }
+ {
+ \keys_set:nn { ducksay } { #1 }
+ }
+\NewDocumentCommand \AddAnimal { s m +v }
+ {
+ \ducksay_add_animal_inner:nn { #2 } { #3 }
+ \bool_if:NT \l_ducksay_also_add_think_bool
+ { \ducksay_create_think_animal:n { #2 } }
+ \IfBooleanT{#1}
+ { \keys_define:nn { ducksay } { default_animal .meta:n = { #2 } } }
+ }
+\NewDocumentCommand \AddColoredAnimal { s m +v }
+ {
+ \ducksay_add_animal_inner:nn { #2 } { #3 }
+ \regex_replace_all:Nnc \c_ducksay_color_delim_regex
+ { \c{bgroup}\c{color}\cB\{\1\cE\}\2\c{egroup} }
+ { g_ducksay_animal_say_#2_tl }
+ \regex_replace_all:Nnc \c_ducksay_color_regex
+ { \c{color}\cB\{\1\cE\} }
+ { g_ducksay_animal_say_#2_tl }
+ \regex_replace_all:Nnc \c_ducksay_textcolor_regex
+ { \c{textcolor}\cB\{\1\cE\}\cB\{\2\cE\} }
+ { g_ducksay_animal_say_#2_tl }
+ \bool_if:NT \l_ducksay_also_add_think_bool
+ { \ducksay_create_think_animal:n { #2 } }
+ \IfBooleanT{#1}
+ { \keys_define:nn { ducksay } { default_animal .meta:n = { #2 } } }
+ }
+\bool_if:NT \l_ducksay_version_one_bool
+ { \file_input:n { ducksay.code.v1.tex } }
+\bool_if:NT \l_ducksay_version_two_bool
+ { \file_input:n { ducksay.code.v2.tex } }
\ExplSyntaxOff
-
-% Animals:>>>
-% some of the below are from http://ascii.co.uk/art/kangaroo
-\AddAnimal{duck}%>>>
-{ \
- \ __
- >(' )
- )/
- /(
- / `----/
- \ ~=- /
- ~^~^~^~^~^~^~^}%<<<
-\AddAnimal{small-duck}%>>>
-{ \
- \
- >()_
- (__)__ _}%<<<
-\AddAnimal{duck-family}%>>>
-{ \
- \ __
- >(' )
- )/
- /(
- / `----/ -()_ >()_
- __\__~=-_/__ _(__)__(__)__ _}%<<<
-\AddAnimal{cow}%>>>
-{ \ ^__^
- \ (oo)\_______
- (__)\ )\/\
- ||----w |
- || ||}%<<<
-\AddAnimal{head-in}%>>>
-{ \
- \ ^__^ /
- (oo)\_______/ ________
- (__)\ )=( ___|_ \____
- ||----w | \ \ \____ |
- || || || ||}%<<<
-\AddAnimal{sodomized}%>>>
-{ \ _
- \ (_)
- ^__^ / \
- (oo)\_____/_\ \
- (__)\ ) /
- ||----w ((
- || ||>>}%<<<
-\AddAnimal{tux}%>>>
-{ \
- \ .--.
- |o_o |
- |\_/ |
- // \ \
- (| | )
- /'\_ _/`\
- \___)=(___/}%<<<
-\AddAnimal{pig}%>>>
-+ \ _//| .-~~~-.
- \ _/oo } }-@
- ('')_ } |
- `--'| { }--{ }
- //_/ /_/+%<<<
-\AddAnimal{frog}%>>>
-{ \
- \ (.)_(.)
- _ ( _ ) _
- / \/`-----'\/ \
- __\ ( ( ) ) /__
- ) /\ \._./ /\ (
- )_/ /|\ /|\ \_(}%<<<
-\AddAnimal{snowman}%>>>
-{ \
- \_[_]_
- (")
- >-( : )-<
- (__:__)}%<<<
-\AddAnimal{hedgehog}%>>>
-{ \ .\|//||\||.
- \ |/\/||/|//|/|
- /. `|/\\|/||/||
- o__,_|//|/||\||'}%<<<
-\AddAnimal{kangaroo}%>>>
-{ \
- \ _,' ___
- <__\__/ \
- \_ / _\
- \,\ / \\
- // \\
- ,/' `\_,}%<<<
-\AddAnimal{rabbit}%>>> http://chris.com/ascii/index.php?art=animals/rabbits
-{ \ / \`\ __
- \ | \ `\ /`/ \
- \ \_/`\ \-"-/` /\ \
- | | \ |
- (d b) \_/
- / \
- ,".|.'.\_/.'.|.",
- / /\' _|_ '/\ \
- | / '-`"`-' \ |
- | | | |
- | \ \ / / |
- \ \ \ / / /
- `"`\ : /'"`
- `""`""`}%<<<
-\AddAnimal{bunny}%>>>
-{ \
- \ /
- /\ /
- ( )
- .( o ).}%<<<
-\AddAnimal{small-rabbit}%>>>
-{ \
- \ _//
- (')---.
- _/-_( )o}%<<<
-\AddAnimal{dragon}%>>>
-{ \ / \ //\
- \ |\___/| / \// \\
- \ /0 0 \__ / // | \ \
- / / \/_/ // | \ \
- @_^_@'/ \/_ // | \ \
- //_^_/ \/_ // | \ \
- ( //) | \/// | \ \
- ( / /) _|_ / ) // | \ _\
- ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
- (( / / )) ,-{ _ `-.|.-~-. .~ `.
- (( // / )) '/\ / ~-. _ .-~ .-~^-. \
- (( /// )) `. { } / \ \
- (( / )) .----~-.\ \-' .~ \ `. \^-.
- ///.----..> \ _ -~ `. ^-` ^-_
- ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
- /.-~}%<<<
-\AddAnimal{dog}%>>> http://www.ascii-art.de/ascii/def/dogs.txt
-{ \ __
- \ .-'\/\
- "\ '------.
- ___/ ( .'_____
- '-----'"""'------"""""'}%<<<
-\AddAnimal{squirrel}%>>> http://ascii.co.uk/art/squirrel
-{ \ ,;:;;,
- \ ;;;;;
- .=', ;:;;:,
- /_', "=. ';:;:;
- @=:__, \,;:;:'
- _(\.= ;:;;'
- `"_( _/="`
- `"'``}%<<<
-% from http://www.ascii-art.de/ascii/uvw/unicorn.txt
-\AddAnimal{unicorn}
-{ \
- \ /((((((\\\\
- ---====((((((((((\\\\\
- (( \\\\\\\
- ( (* _/ \\\\\\\
- \ / \ \\\\\\_ __,,__
- | | | </ "------"" ((\\\\
- o_| / / \ \\\\ \\\\\\\
- | ._ ( \ \\\\\\\\\\\\\\\\
- | / / / \\\\\\\ \\
- .______/\/ / / / \\\
- / __.____/ _/ ___----( /\
- / / / ________/:______,---' \ / \_
- / / \ \ \ \ \_ \
- ( < \ \ > / \ \
- \/ \\_ / / > )
- \_| / / / /
- _// _//
- /_| /_|}
-
-% from http://www.ascii-art.de/ascii/s/starwars.txt :
-\AddAnimal{yoda}%>>>
-{ \
- \ ____
- \ _.' : `._
- .-.'`. ; .'`.-.
- __ / : ___\ ; /___ ; \ __
- ,'_ ""--.:__;".-.";: :".-.":__;.--"" _`,
- :' `.t""--.. '<@.`;_ ',@>` ..--""j.' `;
- `:-.._J '-.-'L__ `-- ' L_..-;'
- "-.__ ; .-" "-. : __.-"
- L ' /.------.\ ' J
- "-. "--" .-"
- __.l"-:_JL_;-";.__
- .-j/'.; ;"""" / .'\"-.
- .' /:`. : : /.".''; `.
- .-" / ;`.". : ."." : "-.
- .+"-. : : ".".". ."." ;-._ \
- ; \ `.; ; . "."-"." : : "+. ;
- : ; ; ; . ."." ; : ; : \:
- ; : ; : / / / , ;: ; :
-: \ ; : ; ; / : , : ; / ::
-; ; : ; : ; ; ; ; : ;:
-: : ; : ;. ; ' : : ; : ;
-;\ : ; : . , ; ; ; ;
-: `."-; : ; . ; : ; / ;
- ; -: ; : , , ; : .-" :
- :\ \ : ; , : \.-" :
- ;`. \ ; : . , ;.'_..-- / ;
- : "-. "-: ; , :/." .' :
- \ \ : : ;/ __ :
- \ .-`.\ /t-"" ":-+. :
- `. .-" `l __/ /`. : ; ; \ ;
- \ .-" .-"-.-" .' .'j \ / ;/
- \ / .-" /. .'.' ;_:' ;
- :-""-.`./-.' / `.___.'
- \ `t ._ /
- "-.t-._:'}%<<<
-\AddAnimal{yoda-head}%>>>
-{ \
- \ ____
- \ _.' : `._
- .-.'`. ; .'`.-.
- __ / : ___\ ; /___ ; \ __
- ,'_ ""--.:__;".-.";: :".-.":__;.--"" _`,
- :' `.t""--.. '<@.`;_ ',@>` ..--""j.' `;
- `:-.._J '-.-'L__ `-- ' L_..-;'
- "-.__ ; .-" "-. : __.-"
- L ' /.------.\ ' J
- "-. "--" .-"
- __.l"-:_JL_;-";.__
- .-j/'.; ;"""" / .'\"-.
- .' /:`. : : /.".''; `.
- .-" / ;`.". : ."." : "-.
- .+"-. : : ".".". ."." ;-._ \}%<<<
-% from https://www.ascii-code.com/ascii-art/movies/star-wars.php
-\AddAnimal{small-yoda}%>>>
-{ \
- \
- __.-._
- '-._"7'
- /'.-c
- | /T
- _)_/LI}%<<<
-\AddAnimal{r2d2}%>>>
-{ \
- \ ,-----.
- ,'_/_|_\_`.
- /<<::8[O]::>\
- _|-----------|_
- | | ====-=- | |
- | | -=-==== | |
- \ | ::::|()|| /
- | | ....|()|| |
- | |_________| |
- | |\_______/| |
- / \ / \ / \
- `---' `---' `---'}%<<<
-\AddAnimal{vader}%>>>
-{ \ _.-'~~~~~~`-._
- \ / || \
- / || \
- | || |
- | _______||_______ |
- |/ ----- \/ ----- \|
- / ( ) ( ) \
- / \ ----- () ----- / \
- / \ /||\ / \
- / \ /||||\ / \
- / \ /||||||\ / \
-/_ \O========O/ _\
- `--...__|`-._ _.-'|__...--'
- | `' |}%<<<
-%<<<
-
-\endinput
-% vim: fdm=marker foldmarker=>>>,<<<
+\input{ducksay.animals.tex}
+%%
+%%
+%% End of file `ducksay.sty'.