Oh my blog! Whee! Wrong by design
  • WordBuilder

    The WordBuilder generator page

    The WordBuilder dictionary page

    The WordBuilder translator page

    Download the current version of WordBuilder here.

    Need help?

    Support forums to the rescue!



    Tokens <token set name> <space separated list of tokens>

    StartingRule <rule name> [<default amount>]

    Column <column title> <data source>

    Where data source can be a mark, a branch, or a path to either below a branch:

    Rule <rule name> [<probability>] {

    Where commands can be:

    Literal <string>
    – appends string to the word.

    Prelit <string>
    – inserts string at the start of the word.

    Token <token set name>
    – appends a random token from the token set.

    Prefix <token set name>
    – inserts a random token from the token set at the start of the word.

    – repeats the last token.

    Translate {
    <source tokens> => <replace tokens>


    Where source tokens and replace tokens are space separated lists of tokens. A special token # in source marks the start of the word when placed at the start of the list and the end of the word when placed at the end of the list.

    # a a => å
    Will replace the tokens a a at the start of the word with å.

    individual tokens can be matched either by single tokens, token lists (matching any one token from the list) or token set (matching any one token from that set. On the replacement side, token lists can also be used, inserting one token from that list, as can token sets.
    tokens vowels a e i o u y
    translate {
    [b v d g] => r // matching one of b v d or g
    $vowels => e // mathing any vowel token
    r => [b v d g] // replace r with one of b v d or g
    e => $vowels // replace e with any one vowel token
    ($vowels) b => \1 p // replace a vowel followed by b with that same vowel followed by p

    Token lists may also contain token sets which are then expanded: [b $vowels] matches or replaces to b or any vowel.

    – turns the first letter of the latest token upper case.

    Drop [<amount>]
    – Drops the last amount tokens from the word. Amount defaults to 1.

    Leave <amount>
    – Drops tokens from the word until no more than amount tokens are left.

    Loop <numbers> {

    – repeats the commands inside the curly brackets a number of times selected at random from the <numbers> token list.
    loop 0 1 1 4[2] 8[3] {
    /* repeat 0, 1, 2 or 3 times,
    with 1 being twice as likely as 0,
    2 being four times as likely as 0
    and 3 being 8 times as likely as 0

    Random {
    <Weight> <Command>


    – Picks a single command at (weighted) random and runs that command.
    random {
    2 rule Feminine
    3 rule Masculine
    1 rule Neuter

    Rule <rule name>
    – executes a rule with the given name. If more than one rule with the same name exists,
    a rule is selected at random, with the probabilities as assigned.

    Branch <branch name> <rule name>
    – branches the current word and executes a rule with the given name as per the Rule command.

    Apply {

    – executes the commands on the current branch and all sub-branches.
    apply {
    literal a // appends the literal a on all branches

    Mark <mark name> <mark value>
    – marks the current word with the name/value pair as specified. Overwrites previous marks with the same name.


    Single line comments are marked with double slashes:

    // single line comment on a line of its own
    rule test { // comment at the end of a line

    Multiline comments must start the first line with /* and end the last line with */
    /* block comment begins
    block comment */ doesn't end here
    block comment ends */


    Names are case sensitive, commands are not. Indentation is optional.

    If there’s a problem in your code, the warnings window appears at the bottom. Try using a command that you know doesn’t exist. Missing }s and malformed commands and such go in there as well. Double clicking a warning with a line number in it will take you to that line in the code window.

    In the right side, the bottom section is a detail view of the generated words. If you select one or more words in the results list (top section), you’ll see the word in the detail view, but with branches and marks shown. Check out the Danish.wordo file for an example of both.

    Token lists may contain the same token multiple times, naturally increasing the likelihood of them appearing. A shorthand for representing the same token multiple times is: <amount>[<token list>]. Each token in the list is repeated amount number of times. 3[a] is equivalent to “a a a”, and 2[i o] to “i o i o”

    Marks are just free-text markers on words, I figured one could use them to mark word classes, like I did in danish.wordo, but also to mark a word as derogatory or politeness level or something like that.

    Branches allow you to make different endings on a word, and you can branch your branches. I use that to inflect verbs and nouns in danish.wordo. Also useful to work out the adjective form of a noun (cat -> cat-like or cattish, e.g.)