abstract sclass HAbstractRenderable { S baseLink; MakeFrame makeFrame; sinterface MakeFrame { S makeFrame(S title, S contents); } *() {} *(S *baseLink) {} HAbstractRenderable makeFrame(MakeFrame makeFrame) { this.makeFrame = makeFrame; this; } S baseLinkPlus(S uri) { ret nempty(uri) ? appendSlash(baseLink) + uri : baseLink; } // title is in HTML S frame(S title, S contents) { if (makeFrame != null) ret makeFrame.makeFrame(title, contents); ret h1_title(title) + contents; } }