Factor out some repetition in the printers

Trade-off is the code is possibly harder to understand.
Some work on scenario outlines