Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/common-nighthawk/go-figure
Prints ASCII art from text.
https://github.com/common-nighthawk/go-figure
Last synced: 5 days ago
JSON representation
Prints ASCII art from text.
- Host: GitHub
- URL: https://github.com/common-nighthawk/go-figure
- Owner: common-nighthawk
- License: mit
- Created: 2016-09-29T18:33:35.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2022-02-08T21:02:58.000Z (almost 3 years ago)
- Last Synced: 2024-08-02T16:44:58.206Z (3 months ago)
- Language: Go
- Homepage:
- Size: 2.9 MB
- Stars: 611
- Watchers: 6
- Forks: 51
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.com/common-nighthawk/go-figure.svg?branch=master)](https://travis-ci.com/common-nighthawk/go-figure)
# Go Figure
## Description
Go Figure prints beautiful ASCII art from text.
It supports [FIGlet](http://www.figlet.org/) files,
and most of its features.This package was inspired by the Ruby gem [artii](https://github.com/miketierney/artii),
but built from scratch and with a different feature set.## Installation
`go get github.com/common-nighthawk/go-figure`## Basic Example
```go
package mainimport("github.com/common-nighthawk/go-figure")
func main() {
myFigure := figure.NewFigure("Hello World", "", true)
myFigure.Print()
}
``````txt
_ _ _ _ __ __ _ _
| | | | ___ | | | | ___ \ \ / / ___ _ __ | | __| |
| |_| | / _ \ | | | | / _ \ \ \ /\ / / / _ \ | '__| | | / _` |
| _ | | __/ | | | | | (_) | \ V V / | (_) | | | | | | (_| |
|_| |_| \___| |_| |_| \___/ \_/\_/ \___/ |_| |_| \__,_|
```You can also make colorful figures:
```go
func main() {
myFigure := figure.NewColorFigure("Hello World", "", "green", true)
myFigure.Print()
}
```## Documentation
### Create a Figure
There are three ways to create a Figure. These are--
the method `func NewFigure`,
the method `func NewColorFigure`, and
the method `func NewFigureWithFont`.Each constructor takes the arguments: the text, font, and strict mode.
The "color" constructor takes a color as an additional arg.
The "with font" specifies the font differently.
The method signature are:
```
func NewFigure(phrase, fontName string, strict bool) figure
func NewColorFigure(phrase, fontName string, color string, strict bool) figure
func NewFigureWithFont(phrase string, reader io.Reader, strict bool) figure
````NewFigure` requires only the name of the font, and uses the font file shipped
with this package stored in bindata.If passed an empty string for the font name, a default is provided.
That is, these are both valid--`myFigure := figure.NewFigure("Foo Bar", "", true)`
`myFigure := figure.NewFigure("Foo Bar", "alphabet", true)`
Please note that font names are case sensitive.
`NewFigureWithFont`, on the other hand, accepts the font file directly.
This allows you to BYOF (bring your own font).
Provide the absolute path to the flf.
You can point to a file the comes with this project
or you can store the file anywhere you'd like and use that location.The font files are available in the [fonts folder](https://github.com/common-nighthawk/go-figure/tree/master/fonts)
and on [figlet.org](http://www.figlet.org/fontdb.cgi).Here are two examples--
`myFigure := figure.NewFigureWithFont("Foo Bar", "/home/ubuntu/go/src/github.com/common-nighthawk/go-figure/fonts/alphabet.flf", true)`
`myFigure := figure.NewFigureWithFont("Foo Bar", "/home/lib/fonts/alaphabet.flf", true)`
You can also make colorful figures! The current supported colors are:
blue, cyan, gray, green, purple, red, white, yellow.An example--
`myFigure := figure.NewColorFigure("Foo Bar", "", "green", true)
Strict mode dictates how to handle characters outside of standard ASCII.
When set to true, a non-ASCII character (outside character codes 32-127)
will cause the program to panic.
When set to false, these characters are replaced with a question mark ('?').
Examples of each--`figure.NewFigure("Foo 👍 Bar", "alphabet", true).Print()`
```txt
2016/12/01 19:35:38 invalid input.
````figure.NewFigure("Foo 👍 Bar", "alphabet", false).Print()`
```txt
_____ ___ ____
| ___| ___ ___ |__ \ | __ ) __ _ _ __
| |_ / _ \ / _ \ / / | _ \ / _` | | '__|
| _| | (_) | | (_) | |_| | |_) | | (_| | | |
|_| \___/ \___/ (_) |____/ \__,_| |_|
```### Methods: stdout
#### Print()
The most basic, and common, method is func Print.
A figure responds to Print(), and will write the output to the terminal.
There is no return value.`myFigure.Print()`
But if you're feeling adventurous,
explore the methods below.#### Blink(duration, timeOn, timeOff int)
A figure responds to the func Blink, taking three arguments.
`duration` is the total time the banner will display, in milliseconds.
`timeOn` is the length of time the text will blink on (also in ms).
`timeOff` is the length of time the text will blink off (ms).
For an even blink, set `timeOff` to -1
(same as setting `timeOff` to the value of `timeOn`).
There is no return value.`myFigure.Blink(5000, 1000, 500)`
`myFigure.Blink(5000, 1000, -1)`
#### Scroll(duration, stillness int, direction string)
A figure responds to the func Scroll, taking three arguments.
`duration` is the total time the banner will display, in milliseconds.
`stillness` is the length of time the text will not move (also in ms).
Therefore, the lower the stillness the faster the scroll speed.
`direction` can be either "right" or "left" (case insensitive).
The direction will be left if an invalid option (e.g. "foo") is passed.
There is no return value.`myFigure.Scroll(5000, 200, "right")`
`myFigure.Scroll(5000, 100, "left")`
#### Dance(duration, freeze int)
A figure responds to the func Dance, taking two arguments.
`duration` is the total time the banner will display, in milliseconds.
`freeze` is the length of time between dance moves (also in ms).
Therefore, the lower the freeze the faster the dancing.
There is no return value.`myFigure.Dance(5000, 800)`
### Methods: Writers
#### Write(w io.Writer, fig figure)
Unlike the above methods that operate on a figure value,
func Write is a function that takes two arguments.
`w` is a value that implements all the methods in the io.Writer interface.
`fig` is the figure that will be written.`figure.Write(w, myFigure)`
This method would be useful, for example, to add a nifty banner to a web page--
```go
func landingPage(w http.ResponseWriter, r *http.Request) {
figure.Write(w, myFigure)
}
```### Methods: Misc
#### Slicify() ([]string)
If you want to do something outside of the created methods,
you can grab the internal slice.
This gives you a good start to build anything
with the ASCII art, if manually.A figure responds to the func Slicify,
and will return the slice of strings.`myFigure.Slicify()`
returns
```txt
["FFFF BBBB ",
"F B B ",
"FFF ooo ooo BBBB aa rrr",
"F o o o o B B a a r ",
"F ooo ooo BBBB aaa r "]
```## More Examples
`figure.NewFigure("Go-Figure", "isometric1", true).Print()````
___ ___ ___ ___ ___ ___ ___
/\ \ /\ \ /\ \ ___ /\ \ /\__\ /\ \ /\ \
/::\ \ /::\ \ /::\ \ /\ \ /::\ \ /:/ / /::\ \ /::\ \
/:/\:\ \ /:/\:\ \ /:/\:\ \ \:\ \ /:/\:\ \ /:/ / /:/\:\ \ /:/\:\ \
/:/ \:\ \ /:/ \:\ \ /::\~\:\ \ /::\__\ /:/ \:\ \ /:/ / ___ /::\~\:\ \ /::\~\:\ \
/:/__/_\:\__\ /:/__/ \:\__\ /:/\:\ \:\__\ __/:/\/__/ /:/__/_\:\__\ /:/__/ /\__\ /:/\:\ \:\__\ /:/\:\ \:\__\
\:\ /\ \/__/ \:\ \ /:/ / \/__\:\ \/__/ /\/:/ / \:\ /\ \/__/ \:\ \ /:/ / \/_|::\/:/ / \:\~\:\ \/__/
\:\ \:\__\ \:\ /:/ / \:\__\ \::/__/ \:\ \:\__\ \:\ /:/ / |:|::/ / \:\ \:\__\
\:\/:/ / \:\/:/ / \/__/ \:\__\ \:\/:/ / \:\/:/ / |:|\/__/ \:\ \/__/
\::/ / \::/ / \/__/ \::/ / \::/ / |:| | \:\__\
\/__/ \/__/ \/__/ \/__/ \|__| \/__/
````figure.NewFigure("Foo Bar Pop", "smkeyboard", true).Print()`
```
____ ____ ____ ____ ____ ____ ____ ____ ____
||F ||||o ||||o ||||B ||||a ||||r ||||P ||||o ||||p ||
||__||||__||||__||||__||||__||||__||||__||||__||||__||
|/__\||/__\||/__\||/__\||/__\||/__\||/__\||/__\||/__\|
````figure.NewFigure("Keep Your Eyes On Me", "rectangles", true).Print()`
```
_____ __ __ _____ _____ _____
| | | ___ ___ ___ | | | ___ _ _ ___ | __| _ _ ___ ___ | | ___ | | ___
| -|| -_|| -_|| . ||_ _|| . || | || _|| __|| | || -_||_ -|| | || || | | || -_|
|__|__||___||___|| _| |_| |___||___||_| |_____||_ ||___||___||_____||_|_||_|_|_||___|
|_| |___|
````figure.NewFigure("ABCDEFGHIJ", "eftichess", true).Print()`
```
######### ######### ___ ######### #########
##[`'`']# \`~'/ ##'\v/`## /\*/\ ##|`+'|## '\v/` ##\`~'/## [`'`'] '\v/` \`~'/
###| |## (o o) ##(o 0)## /(o o)\ ##(o o)## (o 0) ##(o o)## | | (o 0) (o o)
###|__|## \ / \ ###(_)### (_) ###(_)### (_) ###\ / \# |__| (_) \ / \
######### " ######### ######### ####"#### "
````figure.NewFigure("Give your reasons", "doom", true).Blink(10000, 500, -1)`
![blink](docs/blink.gif "blink")
`figure.NewFigure("I mean, I could...", "basic", true).Scroll(10000, 200, "right")`
`figure.NewFigure("But why would I want to?", "basic", true).Scroll(10000, 200, "left")`
![scroll](docs/scroll.gif "scroll")
`figure.NewFigure("It's been waiting for you", "larry3d", true).Dance(10000, 500)`
![dance](docs/dance.gif "dance")
`figure.Write(w, figure.NewFigure("Hello, It's Me", "puffy", true))`
![web](docs/web.png "web")
## Supported Fonts
* 3-d
* 3x5
* 5lineoblique
* acrobatic
* alligator
* alligator2
* alphabet
* avatar
* banner
* banner3-D
* banner3
* banner4
* barbwire
* basic
* bell
* big
* bigchief
* binary
* block
* bubble
* bulbhead
* calgphy2
* caligraphy
* catwalk
* chunky
* coinstak
* colossal
* computer
* contessa
* contrast
* cosmic
* cosmike
* cricket
* cursive
* cyberlarge
* cybermedium
* cybersmall
* diamond
* digital
* doh
* doom
* dotmatrix
* drpepper
* eftichess
* eftifont
* eftipiti
* eftirobot
* eftitalic
* eftiwall
* eftiwater
* epic
* fender
* fourtops
* fuzzy
* goofy
* gothic
* graffiti
* hollywood
* invita
* isometric1
* isometric2
* isometric3
* isometric4
* italic
* ivrit
* jazmine
* jerusalem
* katakana
* kban
* larry3d
* lcd
* lean
* letters
* linux
* lockergnome
* madrid
* marquee
* maxfour
* mike
* mini
* mirror
* mnemonic
* morse
* moscow
* nancyj-fancy
* nancyj-underlined
* nancyj
* nipples
* ntgreek
* o8
* ogre
* pawp
* peaks
* pebbles
* pepper
* poison
* puffy
* pyramid
* rectangles
* relief
* relief2
* rev
* roman
* rot13
* rounded
* rowancap
* rozzo
* runic
* runyc
* sblood
* script
* serifcap
* shadow
* short
* slant
* slide
* slscript
* small
* smisome1
* smkeyboard
* smscript
* smshadow
* smslant
* smtengwar
* speed
* stampatello
* standard
* starwars
* stellar
* stop
* straight
* tanja
* tengwar
* term
* thick
* thin
* threepoint
* ticks
* ticksslant
* tinker-toy
* tombstone
* trek
* tsalagi
* twopoint
* univers
* usaflag
* wavy
* weird## Contributing
Because this project is small, we can dispense with formality.
Submit a pull request, open an issue, request a change.
All good!## Wanna Say Thanks?
GitHub stars are helpful.
Most importantly, they help with discoverability.
Projects with more stars are displayed higher
in search results when people are looking for packages.
Also--they make contributors feel good :)If you are feeling especially generous,
give a shout to [@cmmn_nighthawk](https://twitter.com/cmmn_nighthawk).## TODO
* Add proper support for spaces
* More animations
* Implement graceful line-wrapping and smushing
* Deep-copy font for Dance (current implementation is destructive)