The RNG blocks follow a slightly different format than the word blocks.
They are wrapped in square brackets instead of curly braces. The format
is as follows:
[cmd:arguments]
`cmd` can be one of either "rng" or "hide". "rng" takes a comma
separated list as its arguments and will choose one option from the
list. Only raw words are accepted here (word blocks are not parsed).
"hide" will randomly hide its arguments in the output string. The
arguments for this command *are* parsed, so {word} and {{new_word}}
blocks can be used.
Implement the consumeNewWord() method that will handle new words defined
in format strings enclosed in double curly braces. The format is as
follows:
{{word_type:word:options,list}}
The notable difference between this and the other definitions is that
only verbs and nouns are allowed to be defined this way. Additionally
only regular verbs and nouns are allowed (the "irregular" option is
ignored).
A new sentence has been added that utilizes this new function.
Lastly, some of the option parsing code for verbs and nouns has
been separated into their own functions so it can be reused between both
consumeWord() and consumeNewWord().
Base word types are implemented. The format for defining a word is as follows:
{word_type:optionA,optionB}
Where `word_type` is one of the following:
- adjective
- noun
- noun_phrase
- pronoun
- verb
Followed by a colon and a comma separated list of options for that word.
Options are as follows (adjectives have no options):
Nouns:
- compound
- plural
Noun Phrase:
- indefinite
- noadj
- plural
- compound
Pronouns:
- plural
Verbs:
- conjugation type: i (default), you, it, we, or they
- conjugation time: past, present (default), or future
- invert (not implemented yet)
Options for a word type are optional and may be omitted.
Added pronouns to the data. These act similar to the other types of
words regarding getting random ones from the database.
More sentence types have been added, however they are all in their own
functions for now. Eventually, these functions will be replaced by
format strings in the database and will not be hard coded.
Removed the server object and moved the business layer into the main
namespace. This turns the main namespace into a library instead of a
server implementation. All of the http specific stuff (aside from
everything in frontend/) has been moved to the server commmand utility
in cmd/server.go.