     @y -= @currentLineHeight(true) * lines + @_lineGap
     return this
     
-  text: (text, x, y, options) ->
+  _text: (text, x, y, options, lineCallback) ->
     options = @_initOptions(x, y, options)
     
     # Convert text to a string

    options.columnGap ?= 18 # 1/4 inch

    return options
  
  widthOfString: (string, options = {}) ->
    @_font.widthOfString(string, @_fontSize) + (options.characterSpacing or 0) * (string.length - 1)
    
  _line: (text, options = {}, wrapper) ->
    @_fragment text, @x, @y, options
    lineGap = options.lineGap or @_lineGap or 0

      
    # render paragraphs as single lines
    else
      lineCallback line, options for line in text.split '\n'
    
    return this
    
  text: (text, x, y, options) ->
    @_text text, x, y, options, @_line.bind(this)
    
  widthOfString: (string, options = {}) ->
    @_font.widthOfString(string, @_fontSize) + (options.characterSpacing or 0) * (string.length - 1)
    
  heightOfString: (text, options) ->
    {x,y} = this
    lineGap = options.lineGap or @_lineGap or 0
    
    @_text text, 0, 0, options, (line, options) =>
      @y += @currentLineHeight(true) + lineGap
      
    height = @y # we started at y=0
    @x = x
    @y = y
    
    return height      
    
  list: (list, x, y, options, wrapper) ->
    options = @_initOptions(x, y, options)
