Awesome
fantasyname
This is a golang implementation of name generator described at RinkWorks, its based on https://github.com/skeeto/fantasyname code.
example
How it looks like:
import (
"fmt"
"log"
"time"
"math/rand"
fn "github.com/s0rg/fantasyname"
)
func main() {
rand.Seed(time.Now().UnixNano())
gen, err := fn.Compile("sV'i", fn.Collapse(true), fn.RandFn(rand.Intn))
if err != nil {
log.Fatal(err)
}
fmt.Println(gen.String()) // will print something like: entheu'loaf
}
Here is a full example.
You can run it with go run _example/main.go
to see results.
pattern syntax
The letters s
, v
, V
, c
, B
, C
, i
, m
, M
, D
, and d
represent different types of random replacements:
s
- generic syllablev
- vowelV
- vowel or vowel combinationc
- consonantB
- consonant or consonant combination suitable for beginning a wordC
- consonant or consonant combination suitable anywhere in a wordi
- insultm
- mushy nameM
- mushy name endingD
- consonant suited for a stupid person's named
- syllable suited for a stupid person's name (begins with a vowel)
Everything else is emitted literally.
All characters between parenthesis ()
are emitted literally. For example, the pattern s(dim)
,
emits a random generic syllable followed by dim
.
Characters between angle brackets <>
emit patterns from the table above.
Imagine the entire pattern is wrapped in one of these.
In both types of groupings, a vertical bar |
denotes a random choice. Empty groups are allowed.
For example, (foo|bar)
emits either foo
or bar
. The pattern <c|v|>
emits a constant, vowel,
or nothing at all.
An exclamation point !
means to capitalize the component that follows it. For example,
!(foo)
will emit Foo
and v!s
will emit a lowercase vowel followed by a capitalized syllable, like eRod
.