po blog
Form

Form
wstring Name
wstring Description
0:A stanzas
M:M Locale
byte How flexible is form (what percentage of broken rules to total rules before form itself broken)
M:0 Help
enum Special Nature (none, acrostic, alphabetical acrostic, prose, concrete (& go no further!))
0:A Repeat
0:A Rhyme Pattern
0:A Syllable Stress Pattern

Stanza
M:1 Form
bool Repeatable
bool Optional
wstring comment (e.g. chorus, strophe, antistrophe, epode, etc..)
1:A lines
bool Is line count fixed
0:A Repeat
0:A Rhyme Pattern
0:A Syllable Stress Pattern

Repeat
lineno Line repeated
byte Repeat count
enum Nature of repeat count (absolute, relative, at least n, at most n, ad nauseum)

Rhyme Pattern
lineno Line rhymed
enum Nature (end of line, specific word, specific syllable, neighbouring word)
uint Word / Syllable number

Syllable Stress Pattern
uint Stressed syllable number

Line
M:1 Stanza
bool Is start of stanza
M:0 Metre (0 for irrelevent, e.g. clerihew)
0:M Effects

Effect
M:1 Line
enum Position Type (syllable number, word number, "Beginning", "End", "Middle", "Anywhere")
ushort Position value
bool Is effect optional
enum Type of effect (rhyme, pararhyme, alliteration, ...) [effects need more study for word manipulation]

Metre
wstring Name
ushort Syllable count
enum Stress scheme (enum, one of basic, sprung, or none)
enum Stress pattern (must fit standard names in somewhere, e.g. trochee, iamb, blah blah blah)