diff --git a/docs/make.jl b/docs/make.jl index 50a2751..5089b98 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -15,7 +15,8 @@ makedocs(; ), pages=[ "Home" => "index.md", - "Available Cowfiles" => "cows.md" + "Available Cowfiles" => "cows.md", + "Make your own Cowfile" => "cowfiles.md", ], ) diff --git a/docs/src/cowfiles.md b/docs/src/cowfiles.md new file mode 100644 index 0000000..aad5a1e --- /dev/null +++ b/docs/src/cowfiles.md @@ -0,0 +1,39 @@ +# Making a cow function + +The original cowsay used Perl scripts (called 'cowfiles') to allow for creating more ASCII +cow art. Cowsay.jl uses Julia functions, instead. In order to be usable by `Cowsay.cowsay`, +a cow function **must** + +1. Take the correct arguments + + The function must take three (3) + [keyword arguments](https://docs.julialang.org/en/v1/manual/functions/#Keyword-Arguments) + of the form + + - `eyes::AbstractString="oo"` + - `tongue::AbstractString=" "` + - `thoughts::AbstractString="\\"` + + When drawing the cow artwork, you may then use the variables `eyes` in place of the + eyes, `tongue` in place of the tongue, and `thoughts` in place of the speech ballon + trail. Use of these variables in constructing the cow is optional (but makes the use of + your cow function far more fun), but all three arguments must be present in the + signature, regardless. + +2. Return a string + + The cow artwork must be returned from the function as a string. This is distinctly + different from how the original cowsay modified the `$the_cow` variable. + +## Helpful hints for making cow functions + +1. Include one function per file, with the extension `.cow.jl` +2. Do not indent within a `.cow.jl` file to better see the artwork +3. Make use of string literals (`"""`) and string interpolation (`$`) to build the cow + art +4. Be sure to escape backslashes (`\`) and dollar signs (`$`) within your artwork +5. When converting from Perl cowfiles, _unescape_ at symbols (`@`), as these are + **not** special in Julia strings +6. Split the `eyes` variable to get individual left- and right-eye when creating large cow + functions +7. Have fun! diff --git a/src/Cowsay.jl b/src/Cowsay.jl index 1363eea..2122609 100644 --- a/src/Cowsay.jl +++ b/src/Cowsay.jl @@ -51,46 +51,6 @@ Print an ASCII picture of a cow saying `message` cowfiles support this, though. - `tongue::AbstractString=" "`: A two-character string to be drawn in for the tongue. Not all cowfiles support this. - ---- - -# Making a cow function - -The original cowsay used Perl scripts (called 'cowfiles') to allow for creating more ASCII -cow art. Cowsay.jl uses Julia functions, instead. In order to be usable by `Cowsay.cowsay`, -a cow function **must** - -1. Take the correct arguments - - The function must take three (3) - [keyword arguments](https://docs.julialang.org/en/v1/manual/functions/#Keyword-Arguments) - of the form - - - `eyes::AbstractString="oo"` - - `tongue::AbstractString=" "` - - `thoughts::AbstractString="\\"` - - When drawing the cow artwork, you may then use the variables `eyes` in place of the - eyes, `tongue` in place of the tongue, and `thoughts` in place of the speech ballon - trail. Use of these variables in constructing the cow is optional (but makes the use of - your cow function far more fun), but all three arguments must be present in the - signature, regardless. - -2. Return a string - - The cow artwork must be returned from the function as a string. This is distinctly - different from how the original cowsay modified the `\$the_cow` variable. - -## Helpful hints for making cow functions - -1. Include one function per file, with the extension `.cow.jl` -2. Do not indent within a `.cow.jl` file to better see the artwork -3. Make use of string literals (`\"""`) and string interpolation (`\$`) to build the cow - art -4. Be sure to escape backslashes (`\\`) and dollar signs (`\$`) within your artwork -5. Split the `eyes` variable to get individual left- and right-eye when creating large cow - functions -6. Have fun! """ function cowsay(message::AbstractString; cow=default, eyes="oo", tongue=" ") balloon = sayballoon(message)