tightened up generic text renderer