prototypes addPrototype: #Writer derivedFrom: {Cloneable}. "A basis for formatted code-printing." Writer addSlot: #indentLevel valued: 0. "The current indentation level." w@(Writer traits) indent [ w indentLevel: w indentLevel + 1 ]. w@(Writer traits) unindent [ w indentLevel: w indentLevel - 1 ]. w@(Writer traits) indentString [' ']. w@(Writer traits) indentOn: s [ w indentLevel timesRepeat: [s ; w indentString] ]. w@(Writer traits) print: node on: s "The basic printing method to specialize on the target syntax object." [overrideThis]. w@(Writer traits) printWithIndent: node on: s [ w indentOn: s. w print: node on: s ]. w@(Writer traits) printInner: node on: s [ w indentOn: s. w printWithIndent: node on: s. w unindent. ].