From 0972697fc4429b971f75335c69d8a71b9999097e Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 21 Sep 2018 21:06:08 +0000 Subject: ducksay (21sep18) git-svn-id: svn://tug.org/texlive/trunk@48720 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/ducksay/ducksay.sty | 631 +++++++----------------- 1 file changed, 182 insertions(+), 449 deletions(-) (limited to 'Master/texmf-dist/tex') 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} -{ \ - \ /((((((\\\\ - ---====((((((((((\\\\\ - (( \\\\\\\ - ( (* _/ \\\\\\\ - \ / \ \\\\\\_ __,,__ - | | | / \ \ - \/ \\_ / / > ) - \_| / / / / - _// _// - /_| /_|} - -% 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'. -- cgit v1.2.3