Skip to content

s0rg/fantasyname

Repository files navigation

PkgGoDev License Go Version Tag Mentioned in Awesome Go

CI Go Report Card Maintainability Test Coverage Issues

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 syllable
  • v - vowel
  • V - vowel or vowel combination
  • c - consonant
  • B - consonant or consonant combination suitable for beginning a word
  • C - consonant or consonant combination suitable anywhere in a word
  • i - insult
  • m - mushy name
  • M - mushy name ending
  • D - consonant suited for a stupid person's name
  • d - 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.