Compare commits
No commits in common. "master" and "v0.3.0" have entirely different histories.
8 changed files with 142 additions and 267 deletions
|
@ -1,34 +0,0 @@
|
||||||
clone:
|
|
||||||
git:
|
|
||||||
image: woodpeckerci/plugin-git
|
|
||||||
settings:
|
|
||||||
partial: false
|
|
||||||
depth: 0
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
JULIA_VERSION:
|
|
||||||
- "1.0"
|
|
||||||
- "1.6"
|
|
||||||
- "1"
|
|
||||||
- "rc"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
test:
|
|
||||||
image: julia:${JULIA_VERSION}
|
|
||||||
pull: true
|
|
||||||
when:
|
|
||||||
event: [pull_request, push]
|
|
||||||
commands:
|
|
||||||
- julia --color=yes -e 'using Pkg; Pkg.activate(pwd()); Pkg.instantiate()'
|
|
||||||
- julia --color=yes -e 'using Pkg; Pkg.activate(pwd()); Pkg.test(;coverage=true)'
|
|
||||||
|
|
||||||
docs:
|
|
||||||
image: julia
|
|
||||||
when:
|
|
||||||
branch: master
|
|
||||||
secrets:
|
|
||||||
- project_access_token
|
|
||||||
commands:
|
|
||||||
- julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()'
|
|
||||||
- julia --project=docs/ docs/make.jl
|
|
||||||
|
|
13
CHANGELOG.md
13
CHANGELOG.md
|
@ -8,16 +8,6 @@ Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- Cow "modes" (Borg, dead, greedy, etc.)
|
|
||||||
|
|
||||||
## [v0.3.1] - 2022-02-01
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Newlines in input message are no longer stripped out during text wrapping
|
|
||||||
|
|
||||||
## [v0.3.0] - 2022-02-01
|
## [v0.3.0] - 2022-02-01
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
@ -83,8 +73,7 @@ Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
- `cowsay` function for Julia in package format
|
- `cowsay` function for Julia in package format
|
||||||
|
|
||||||
[unreleased]: https://github.com/MillironX/Cowsay.jl/compare/v0.3.1...HEAD
|
[Unreleased]: https://github.com/MillironX/Cowsay.jl/compare/v0.3.0...HEAD
|
||||||
[v0.3.0]: https://github.com/MillironX/Cowsay.jl/compare/v0.3.0...v0.3.1
|
|
||||||
[v0.3.0]: https://github.com/MillironX/Cowsay.jl/compare/v0.2.1...v0.3.0
|
[v0.3.0]: https://github.com/MillironX/Cowsay.jl/compare/v0.2.1...v0.3.0
|
||||||
[v0.2.1]: https://github.com/MillironX/Cowsay.jl/compare/v0.2.0...v0.2.1
|
[v0.2.1]: https://github.com/MillironX/Cowsay.jl/compare/v0.2.0...v0.2.1
|
||||||
[v0.2.0]: https://github.com/MillironX/Cowsay.jl/compare/v0.1.0...v0.2.0
|
[v0.2.0]: https://github.com/MillironX/Cowsay.jl/compare/v0.1.0...v0.2.0
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
name = "Cowsay"
|
name = "Cowsay"
|
||||||
uuid = "b6370f49-8ad1-4651-ad9e-3639b35da0e9"
|
uuid = "b6370f49-8ad1-4651-ad9e-3639b35da0e9"
|
||||||
authors = ["Thomas A. Christensen II <25492070+MillironX@users.noreply.github.com> and contributors"]
|
authors = ["Thomas A. Christensen II <25492070+MillironX@users.noreply.github.com> and contributors"]
|
||||||
version = "1.0.0"
|
version = "0.3.0"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
TextWrap = "b718987f-49a8-5099-9789-dcd902bef87d"
|
TextWrap = "b718987f-49a8-5099-9789-dcd902bef87d"
|
||||||
|
|
56
README.md
56
README.md
|
@ -15,7 +15,6 @@
|
||||||
[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://millironx.com/Cowsay.jl/dev)
|
[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://millironx.com/Cowsay.jl/dev)
|
||||||
[![Build Status](https://github.com/MillironX/Cowsay.jl/workflows/CI/badge.svg)](https://github.com/MillironX/Cowsay.jl/actions)
|
[![Build Status](https://github.com/MillironX/Cowsay.jl/workflows/CI/badge.svg)](https://github.com/MillironX/Cowsay.jl/actions)
|
||||||
[![Coverage](https://codecov.io/gh/MillironX/Cowsay.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/MillironX/Cowsay.jl)
|
[![Coverage](https://codecov.io/gh/MillironX/Cowsay.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/MillironX/Cowsay.jl)
|
||||||
[![Genie Downloads](https://shields.io/endpoint?url=https://pkgs.genieframework.com/api/v1/badge/Cowsay)](https://pkgs.genieframework.com?packages=Cowsay)
|
|
||||||
|
|
||||||
A talking cow library for Julia, based on the [Fedora release of
|
A talking cow library for Julia, based on the [Fedora release of
|
||||||
cowsay](https://src.fedoraproject.org/rpms/cowsay).
|
cowsay](https://src.fedoraproject.org/rpms/cowsay).
|
||||||
|
@ -33,7 +32,7 @@ add Cowsay
|
||||||
|
|
||||||
Complete usage info can be found in [the documentation]. Cowsay.jl exports two
|
Complete usage info can be found in [the documentation]. Cowsay.jl exports two
|
||||||
functions: `cowsay` and `cowthink`, which print an ASCII cow saying or thinking
|
functions: `cowsay` and `cowthink`, which print an ASCII cow saying or thinking
|
||||||
a message, respectively.
|
a message without text wrapping, respectively.
|
||||||
|
|
||||||
```julia-repl
|
```julia-repl
|
||||||
julia> using Cowsay
|
julia> using Cowsay
|
||||||
|
@ -60,32 +59,14 @@ julia> cowthink("The farmers who have no livestock,\ntheir lives simply aren't t
|
||||||
|| ||
|
|| ||
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to use talking cows in your program, use the `cowsaid` and
|
|
||||||
`cowthunk` functions to get strings of the cow art.
|
|
||||||
|
|
||||||
```julia-repl
|
|
||||||
julia> @info string("\n", cowsaid("And the longhorns lowed him a welcome\nAs a new voice cried from the buckboard"))
|
|
||||||
┌ Info:
|
|
||||||
│ _________________________________________
|
|
||||||
│ / And the longhorns lowed him a welcome \
|
|
||||||
│ \ As a new voice cried from the buckboard /
|
|
||||||
│ -----------------------------------------
|
|
||||||
│ \ ^__^
|
|
||||||
│ \ (oo)\_______
|
|
||||||
│ (__)\ )\/\
|
|
||||||
│ ||----w |
|
|
||||||
└ || ||
|
|
||||||
```
|
|
||||||
|
|
||||||
There are also plenty of [unexported Cowfiles] that you can use to customize
|
There are also plenty of [unexported Cowfiles] that you can use to customize
|
||||||
your art.
|
your art.
|
||||||
|
|
||||||
```julia-repl
|
```julia-repl
|
||||||
julia> cowsay("This heifer must be empty\n'Cuz she ain't puttin' out", cow=Cowsay.udder)
|
julia> cowsay("Super cattle growth hormone can make your beef delicious", cow=Cowsay.udder)
|
||||||
____________________________
|
__________________________________________________________
|
||||||
/ This heifer must be empty \
|
< Super cattle growth hormone can make your beef delicious >
|
||||||
\ 'Cuz she ain't puttin' out /
|
----------------------------------------------------------
|
||||||
----------------------------
|
|
||||||
\
|
\
|
||||||
\ (__)
|
\ (__)
|
||||||
o o\
|
o o\
|
||||||
|
@ -112,30 +93,7 @@ julia> cowsay("You better watch your step\nwhen you know the chips are down!", t
|
||||||
|| ||
|
|| ||
|
||||||
```
|
```
|
||||||
|
|
||||||
And even change its emotional or physical state using modes.
|
[Julia REPL]: https://docs.julialang.org/en/v1/manual/getting-started/
|
||||||
|
|
||||||
```julia-repl
|
|
||||||
julia> cowsay("He mooed we must fight\nEscape or we'll die\nCows gathered around\n'Cause the steaks were so high"; dead=true)
|
|
||||||
________________________________
|
|
||||||
/ He mooed we must fight \
|
|
||||||
| Escape or we'll die |
|
|
||||||
| Cows gathered around |
|
|
||||||
\ 'Cause the steaks were so high /
|
|
||||||
--------------------------------
|
|
||||||
\ ^__^
|
|
||||||
\ (xx)\_______
|
|
||||||
(__)\ )\/\
|
|
||||||
U ||----w |
|
|
||||||
|| ||
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
If you find a bug in Cowsay.jl, please [file an issue]. I will not be accepting
|
|
||||||
any requests for new cowfiles in this repo, though.
|
|
||||||
|
|
||||||
[file an issue]: https://github.com/MillironX/Cowsay.jl/issues
|
|
||||||
[julia repl]: https://docs.julialang.org/en/v1/manual/getting-started/
|
|
||||||
[pkg mode]: https://docs.julialang.org/en/v1/stdlib/Pkg/
|
[pkg mode]: https://docs.julialang.org/en/v1/stdlib/Pkg/
|
||||||
[the documentation]: https://millironx.com/Cowsay.jl/stable
|
[the documentation]: https://millironx.com/Cowsay.jl/stable
|
||||||
[unexported cowfiles]: https://millironx.com/Cowsay.jl/stable/cows/
|
[unexported Cowfiles]: https://millironx.com/Cowsay.jl/stable/cows/
|
||||||
|
|
97
docs/Manifest.toml
Normal file
97
docs/Manifest.toml
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
# This file is machine-generated - editing it directly is not advised
|
||||||
|
|
||||||
|
[[ANSIColoredPrinters]]
|
||||||
|
git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c"
|
||||||
|
uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9"
|
||||||
|
version = "0.0.1"
|
||||||
|
|
||||||
|
[[Base64]]
|
||||||
|
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
||||||
|
|
||||||
|
[[Cowsay]]
|
||||||
|
path = "/home/tchristensen/src/cowsay"
|
||||||
|
uuid = "b6370f49-8ad1-4651-ad9e-3639b35da0e9"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[[Dates]]
|
||||||
|
deps = ["Printf"]
|
||||||
|
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
||||||
|
|
||||||
|
[[DocStringExtensions]]
|
||||||
|
deps = ["LibGit2"]
|
||||||
|
git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b"
|
||||||
|
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
|
||||||
|
version = "0.8.6"
|
||||||
|
|
||||||
|
[[Documenter]]
|
||||||
|
deps = ["ANSIColoredPrinters", "Base64", "Dates", "DocStringExtensions", "IOCapture", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"]
|
||||||
|
git-tree-sha1 = "f425293f7e0acaf9144de6d731772de156676233"
|
||||||
|
uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
|
||||||
|
version = "0.27.10"
|
||||||
|
|
||||||
|
[[IOCapture]]
|
||||||
|
deps = ["Logging", "Random"]
|
||||||
|
git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a"
|
||||||
|
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
|
||||||
|
version = "0.2.2"
|
||||||
|
|
||||||
|
[[InteractiveUtils]]
|
||||||
|
deps = ["Markdown"]
|
||||||
|
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
|
||||||
|
|
||||||
|
[[JSON]]
|
||||||
|
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
|
||||||
|
git-tree-sha1 = "8076680b162ada2a031f707ac7b4953e30667a37"
|
||||||
|
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
|
||||||
|
version = "0.21.2"
|
||||||
|
|
||||||
|
[[LibGit2]]
|
||||||
|
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
|
||||||
|
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
||||||
|
|
||||||
|
[[Logging]]
|
||||||
|
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
||||||
|
|
||||||
|
[[Markdown]]
|
||||||
|
deps = ["Base64"]
|
||||||
|
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
|
||||||
|
|
||||||
|
[[Mmap]]
|
||||||
|
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
|
||||||
|
|
||||||
|
[[NetworkOptions]]
|
||||||
|
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
|
||||||
|
|
||||||
|
[[Parsers]]
|
||||||
|
deps = ["Dates"]
|
||||||
|
git-tree-sha1 = "ae4bbcadb2906ccc085cf52ac286dc1377dceccc"
|
||||||
|
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
|
||||||
|
version = "2.1.2"
|
||||||
|
|
||||||
|
[[Printf]]
|
||||||
|
deps = ["Unicode"]
|
||||||
|
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
|
||||||
|
|
||||||
|
[[REPL]]
|
||||||
|
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
|
||||||
|
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
|
||||||
|
|
||||||
|
[[Random]]
|
||||||
|
deps = ["Serialization"]
|
||||||
|
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||||
|
|
||||||
|
[[SHA]]
|
||||||
|
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
|
||||||
|
|
||||||
|
[[Serialization]]
|
||||||
|
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
||||||
|
|
||||||
|
[[Sockets]]
|
||||||
|
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
|
||||||
|
|
||||||
|
[[Test]]
|
||||||
|
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
|
||||||
|
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
||||||
|
|
||||||
|
[[Unicode]]
|
||||||
|
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
|
|
@ -6,11 +6,11 @@ DocMeta.setdocmeta!(Cowsay, :DocTestSetup, :(using Cowsay); recursive=true)
|
||||||
makedocs(;
|
makedocs(;
|
||||||
modules=[Cowsay],
|
modules=[Cowsay],
|
||||||
authors="Thomas A. Christensen II <25492070+MillironX@users.noreply.github.com> and contributors",
|
authors="Thomas A. Christensen II <25492070+MillironX@users.noreply.github.com> and contributors",
|
||||||
repo="https://code.millironx.com/millironx/Cowsay.jl/blob/{commit}{path}#{line}",
|
repo="https://github.com/MillironX/cowsay.jl/blob/{commit}{path}#{line}",
|
||||||
sitename="Cowsay.jl",
|
sitename="cowsay.jl",
|
||||||
format=Documenter.HTML(;
|
format=Documenter.HTML(;
|
||||||
prettyurls=get(ENV, "CI", "false") == "true",
|
prettyurls=get(ENV, "CI", "false") == "true",
|
||||||
canonical="https://cowsay-jl.millironx.com/",
|
canonical="https://millironx.com/Cowsay.jl",
|
||||||
assets=String[],
|
assets=String[],
|
||||||
),
|
),
|
||||||
pages=[
|
pages=[
|
||||||
|
@ -21,6 +21,6 @@ makedocs(;
|
||||||
)
|
)
|
||||||
|
|
||||||
deploydocs(;
|
deploydocs(;
|
||||||
repo="code.millironx.com/millironx/Cowsay.jl",
|
repo="github.com/MillironX/Cowsay.jl",
|
||||||
devbranch="master",
|
devbranch="master",
|
||||||
)
|
)
|
||||||
|
|
175
src/Cowsay.jl
175
src/Cowsay.jl
|
@ -56,18 +56,7 @@ Print an ASCII picture of a cow saying/thinking `message`
|
||||||
cowfiles support this, though.
|
cowfiles support this, though.
|
||||||
- `tongue::AbstractString=" "`: A two-character string to be drawn in for the tongue. Not
|
- `tongue::AbstractString=" "`: A two-character string to be drawn in for the tongue. Not
|
||||||
all cowfiles support this.
|
all cowfiles support this.
|
||||||
- `wrap::Int=40`: The number of characters at which to wrap `message` to a new line
|
- `wrap::Int`=40: The number of characters at which to wrap `message` to a new line
|
||||||
- `nowrap::Bool=false`: Don't perform text wrapping on `message`
|
|
||||||
|
|
||||||
## Cow appearance Keywords
|
|
||||||
- `borg::Bool=false`: Initiates Borg mode
|
|
||||||
- `dead::Bool=false`: Causes the cow to appear dead
|
|
||||||
- `greedy::Bool=false`: Invokes greedy mode
|
|
||||||
- `paranoid::Bool=false`: Causes a state of paranoia to come over the cow
|
|
||||||
- `stoned::Bool=false`: Makes the cow appear thoroughly stoned
|
|
||||||
- `tired::Bool=false`: Yields a tired cow
|
|
||||||
- `wired::Bool=false`: Somewhat the opposite of `tired`, and initiates wired mode
|
|
||||||
- `young::Bool=false`: Brings on the cow's youthful appearance
|
|
||||||
|
|
||||||
# Example
|
# Example
|
||||||
```jldoctest
|
```jldoctest
|
||||||
|
@ -92,12 +81,12 @@ julia> cowthink("Have I mooed today?")
|
||||||
|| ||
|
|| ||
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
function cowsay(message::AbstractString; kwargs...)
|
function cowsay(message::AbstractString; cow=default, eyes="oo", tongue=" ", wrap=40)
|
||||||
cowsay(stdout, message; kwargs...)
|
cowsay(stdout, message, cow=cow, eyes=eyes, tongue=tongue, wrap=wrap)
|
||||||
end
|
end
|
||||||
|
|
||||||
function cowsay(io::IO, message::AbstractString; kwargs...)
|
function cowsay(io::IO, message::AbstractString; cow=default, eyes="oo", tongue=" ", wrap=40)
|
||||||
println(io, cowsaid(message; kwargs...))
|
println(io, cowsaid(message, cow=cow, eyes=eyes, tongue=tongue, wrap=wrap))
|
||||||
end
|
end
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -107,12 +96,12 @@ Print an ASCII picture of a cow thinking `message`
|
||||||
|
|
||||||
See [`cowsay`](@ref)
|
See [`cowsay`](@ref)
|
||||||
"""
|
"""
|
||||||
function cowthink(message::AbstractString; kwargs...)
|
function cowthink(message::AbstractString; cow=default, eyes="oo", tongue=" ", wrap=40)
|
||||||
cowthink(stdout, message; kwargs...)
|
cowthink(stdout, message, cow=cow, eyes=eyes, tongue=tongue, wrap=wrap)
|
||||||
end
|
end
|
||||||
|
|
||||||
function cowthink(io::IO, message::AbstractString; kwargs...)
|
function cowthink(io::IO, message::AbstractString; cow=default, eyes="oo", tongue=" ", wrap=40)
|
||||||
println(io, cowthunk(message; kwargs...))
|
println(io, cowthunk(message, cow=cow, eyes=eyes, tongue=tongue, wrap=wrap))
|
||||||
end
|
end
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -134,8 +123,9 @@ julia> cowthunk("Have I mooed today?")
|
||||||
" _____________________\\n( Have I mooed today? )\\n ---------------------\\n o ^__^\\n o (oo)\\\\_______\\n (__)\\\\ )\\\\/\\\\\\n ||----w |\\n || ||\\n"
|
" _____________________\\n( Have I mooed today? )\\n ---------------------\\n o ^__^\\n o (oo)\\\\_______\\n (__)\\\\ )\\\\/\\\\\\n ||----w |\\n || ||\\n"
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
function cowsaid(message::AbstractString; kwargs...)
|
function cowsaid(message::AbstractString; cow=default, eyes="oo", tongue=" ", wrap=40)
|
||||||
return cowmoo(message, :say; kwargs...)
|
balloon = sayballoon(TextWrap.wrap(message, width=wrap))
|
||||||
|
return string(balloon, cow(eyes=eyes, tongue=tongue))
|
||||||
end
|
end
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -145,110 +135,9 @@ Construct art of a cow thinking `message`.
|
||||||
|
|
||||||
See [`cowsaid`](@ref) and [`cowsay`](@ref)
|
See [`cowsaid`](@ref) and [`cowsay`](@ref)
|
||||||
"""
|
"""
|
||||||
function cowthunk(message::AbstractString; kwargs...)
|
function cowthunk(message::AbstractString; cow=default, eyes="oo", tongue=" ", wrap=40)
|
||||||
return cowmoo(message, :think; kwargs...)
|
balloon = thinkballoon(TextWrap.wrap(message, width=wrap))
|
||||||
end
|
return string(balloon, cow(eyes=eyes, tongue=tongue, thoughts="o"))
|
||||||
|
|
||||||
"""
|
|
||||||
cowmoo(message::AbstractString, mode, kwargs...)
|
|
||||||
|
|
||||||
Converts `message` into either saying or thinking art based on the value of `mode`. All of
|
|
||||||
the default values for `kwargs` for pretty much every other function live here. See
|
|
||||||
[`cowsay`](@ref) for their descriptions.
|
|
||||||
"""
|
|
||||||
function cowmoo(message::AbstractString, mode; kwargs...)
|
|
||||||
cow = dict_or_default(kwargs, :cow, Cowsay.default)
|
|
||||||
eyes = dict_or_default(kwargs, :eyes, "oo")
|
|
||||||
tongue = dict_or_default(kwargs, :tongue, " ")
|
|
||||||
wrap = dict_or_default(kwargs, :wrap, 40)
|
|
||||||
nowrap = dict_or_default(kwargs, :nowrap, false)
|
|
||||||
|
|
||||||
eyes, tongue = construct_face!(eyes, tongue; kwargs...)
|
|
||||||
|
|
||||||
# Default to 'say' mode
|
|
||||||
if mode == :think
|
|
||||||
balloon = thinkballoon
|
|
||||||
thoughts = "o"
|
|
||||||
else
|
|
||||||
balloon = sayballoon
|
|
||||||
thoughts = "\\"
|
|
||||||
end
|
|
||||||
|
|
||||||
wrapped_message = !nowrap ? TextWrap.wrap(message, width=wrap, replace_whitespace=false) : message
|
|
||||||
speechbubble = balloon(wrapped_message)
|
|
||||||
|
|
||||||
return string(speechbubble, cow(eyes=eyes, tongue=tongue, thoughts=thoughts))
|
|
||||||
end
|
|
||||||
|
|
||||||
function construct_face!(eyes, tongue; kwargs...)
|
|
||||||
borg = dict_or_default(kwargs, :borg, false)
|
|
||||||
dead = dict_or_default(kwargs, :dead, false)
|
|
||||||
greedy = dict_or_default(kwargs, :greedy, false)
|
|
||||||
paranoid = dict_or_default(kwargs, :paranoid, false)
|
|
||||||
stoned = dict_or_default(kwargs, :stoned, false)
|
|
||||||
tired = dict_or_default(kwargs, :tired, false)
|
|
||||||
wired = dict_or_default(kwargs, :wired, false)
|
|
||||||
young = dict_or_default(kwargs, :young, false)
|
|
||||||
|
|
||||||
if borg
|
|
||||||
eyes = "=="
|
|
||||||
end
|
|
||||||
|
|
||||||
if dead
|
|
||||||
eyes = "xx"
|
|
||||||
tongue = "U "
|
|
||||||
end
|
|
||||||
|
|
||||||
if greedy
|
|
||||||
eyes = "\$\$"
|
|
||||||
end
|
|
||||||
|
|
||||||
if paranoid
|
|
||||||
eyes = "@@"
|
|
||||||
end
|
|
||||||
|
|
||||||
if stoned
|
|
||||||
eyes = "**"
|
|
||||||
tongue = "U "
|
|
||||||
end
|
|
||||||
|
|
||||||
if tired
|
|
||||||
eyes = "--"
|
|
||||||
end
|
|
||||||
|
|
||||||
if wired
|
|
||||||
eyes = "OO"
|
|
||||||
end
|
|
||||||
|
|
||||||
if young
|
|
||||||
eyes = ".."
|
|
||||||
end
|
|
||||||
|
|
||||||
return eyes, tongue
|
|
||||||
end
|
|
||||||
|
|
||||||
"""
|
|
||||||
dict_or_default(dict, key, value)
|
|
||||||
|
|
||||||
If `key` is present in `dict`, then return `dict[key]`, otherwise return `value`
|
|
||||||
|
|
||||||
# Example
|
|
||||||
```jldoctest
|
|
||||||
julia> dict = Dict(:holstein => "lotsa milk", :jersey => "butterfat", :shorthorn => "worthless");
|
|
||||||
|
|
||||||
julia> Cowsay.dict_or_default(dict, :holstein, "fluid")
|
|
||||||
"lotsa milk"
|
|
||||||
|
|
||||||
julia> Cowsay.dict_or_default(dict, :brown_swiss, "cheese")
|
|
||||||
"cheese"
|
|
||||||
```
|
|
||||||
"""
|
|
||||||
function dict_or_default(dict, key, value)
|
|
||||||
if haskey(dict, key)
|
|
||||||
return dict[key]
|
|
||||||
else
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -284,7 +173,7 @@ function sayballoon(message::AbstractString)
|
||||||
" \\\n"
|
" \\\n"
|
||||||
)
|
)
|
||||||
if nlines > 2
|
if nlines > 2
|
||||||
for i = 2:nlines-1
|
for i=2:nlines-1
|
||||||
balloon = string(
|
balloon = string(
|
||||||
balloon,
|
balloon,
|
||||||
"| ",
|
"| ",
|
||||||
|
@ -321,25 +210,25 @@ function thinkballoon(message::AbstractString)
|
||||||
linelength = max(length.(messagelines)...)
|
linelength = max(length.(messagelines)...)
|
||||||
paddinglength = linelength + 2
|
paddinglength = linelength + 2
|
||||||
|
|
||||||
balloon = string(
|
balloon = string(
|
||||||
" ",
|
" ",
|
||||||
repeat("_", paddinglength),
|
repeat("_", paddinglength),
|
||||||
"\n"
|
"\n"
|
||||||
)
|
)
|
||||||
for i in 1:nlines
|
for i in 1:nlines
|
||||||
|
balloon = string(
|
||||||
|
balloon,
|
||||||
|
"( ",
|
||||||
|
rpad(messagelines[i], linelength),
|
||||||
|
" )\n"
|
||||||
|
)
|
||||||
|
end #for
|
||||||
balloon = string(
|
balloon = string(
|
||||||
balloon,
|
balloon,
|
||||||
"( ",
|
" ",
|
||||||
rpad(messagelines[i], linelength),
|
repeat("-", paddinglength),
|
||||||
" )\n"
|
"\n"
|
||||||
)
|
)
|
||||||
end #for
|
|
||||||
balloon = string(
|
|
||||||
balloon,
|
|
||||||
" ",
|
|
||||||
repeat("-", paddinglength),
|
|
||||||
"\n"
|
|
||||||
)
|
|
||||||
|
|
||||||
return balloon
|
return balloon
|
||||||
end #function
|
end #function
|
||||||
|
|
|
@ -25,28 +25,4 @@ DocMeta.setdocmeta!(Cowsay, :DocTestSetup, :(using Cowsay); recursive=true)
|
||||||
# Cowthink with io redirection
|
# Cowthink with io redirection
|
||||||
@test_warn cowthunk("Moo") cowthink(stderr, "Moo")
|
@test_warn cowthunk("Moo") cowthink(stderr, "Moo")
|
||||||
end
|
end
|
||||||
@testset "Word Wrapping" begin
|
|
||||||
# Long text, default wrap
|
|
||||||
@test cowsaid("Rollin' down a long highway out through New Mexico driftin' down to Santa Fe to ride a bull in a rodeo") == " _________________________________________\n/ Rollin' down a long highway out through \\\n| New Mexico driftin' down to Santa Fe to |\n\\ ride a bull in a rodeo /\n -----------------------------------------\n \\ ^__^\n \\ (oo)\\_______\n (__)\\ )\\/\\\n ||----w |\n || ||\n"
|
|
||||||
|
|
||||||
# Long text, no wrap
|
|
||||||
@test cowsaid("Rollin' down a long highway out through New Mexico driftin' down to Santa Fe to ride a bull in a rodeo", nowrap=true) == " ________________________________________________________________________________________________________\n< Rollin' down a long highway out through New Mexico driftin' down to Santa Fe to ride a bull in a rodeo >\n --------------------------------------------------------------------------------------------------------\n \\ ^__^\n \\ (oo)\\_______\n (__)\\ )\\/\\\n ||----w |\n || ||\n"
|
|
||||||
|
|
||||||
# Long text, conflicting wrap instructions (nowrap should win)
|
|
||||||
@test cowsaid("Rollin' down a long highway out through New Mexico driftin' down to Santa Fe to ride a bull in a rodeo", wrap=80, nowrap=true) == " ________________________________________________________________________________________________________\n< Rollin' down a long highway out through New Mexico driftin' down to Santa Fe to ride a bull in a rodeo >\n --------------------------------------------------------------------------------------------------------\n \\ ^__^\n \\ (oo)\\_______\n (__)\\ )\\/\\\n ||----w |\n || ||\n"
|
|
||||||
|
|
||||||
# Long text, different wrap amount
|
|
||||||
@test cowsaid("Rollin' down a long highway out through New Mexico driftin' down to Santa Fe to ride a bull in a rodeo", wrap=80) == " _________________________________________________________________________________\n/ Rollin' down a long highway out through New Mexico driftin' down to Santa Fe to \\\n\\ ride a bull in a rodeo /\n ---------------------------------------------------------------------------------\n \\ ^__^\n \\ (oo)\\_______\n (__)\\ )\\/\\\n ||----w |\n || ||\n"
|
|
||||||
end
|
|
||||||
@testset "Cow Modes" begin
|
|
||||||
@test Cowsay.construct_face!("oo", " ") == ("oo", " ")
|
|
||||||
@test Cowsay.construct_face!("oo", " "; borg=true) == ("==", " ")
|
|
||||||
@test Cowsay.construct_face!("oo", " "; dead=true) == ("xx", "U ")
|
|
||||||
@test Cowsay.construct_face!("oo", " "; greedy=true) == ("\$\$", " ")
|
|
||||||
@test Cowsay.construct_face!("oo", " "; paranoid=true) == ("@@", " ")
|
|
||||||
@test Cowsay.construct_face!("oo", " "; stoned=true) == ("**", "U ")
|
|
||||||
@test Cowsay.construct_face!("oo", " "; tired=true) == ("--", " ")
|
|
||||||
@test Cowsay.construct_face!("oo", " "; wired=true) == ("OO", " ")
|
|
||||||
@test Cowsay.construct_face!("oo", " "; young=true) == ("..", " ")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue