The key idea of the NG StructuredText:
Split processing into multiple steps:
Basic StructuredText parsing breaks an input string into a hierarchical paragraph data structure. (This is currently list based, but wants to be a DOM.)
Optional steps process the structured text into a more specialized data structure that reflects classification of paragraphs and their text. This is where specific text formating rules, like the classic StructuredTextRules are applied. (The output of this wants to be a DOM too.) This step is performed with one or more parsers.
Parsers are used like functions, however, they are typcally instances of classes that are designed to be customized via inheritence.
Outputters take the data structures produced with the previous steps and produce some sort of output, typically text, such as HTML or XML text.
Outputters are used like functions, however, they are typcally instances of classes that are designed to be customized via inheritence.