The formatting process uses several nested generators; which of them are used is determined by the user's options.
Each generator should take at least one argument, “inner“, and wrap the pieces of text generated by this.
Always yield 2-tuples: (code, text). If "code" is 1, the text is part of the original tokensource being highlighted, if it's 0, the text is some piece of wrapping. This makes it possible to use several different wrappers that process the original source linewise, e.g. line number generators.