         wrapper.lineWidth -= diff
         level = l
 
-      @circle @x - indent + r, @y + midLine, r
-      @fill()
+      switch listType
+        when 'bullet'
+          @circle @x - indent + r, @y + midLine, r
+          @fill()
+        when 'numbered', 'lettered'
+          text = label numbers[i - 1]
+          @_fragment text, @x - indent, @y, options
 
     wrapper.on 'sectionStart', =>
       pos = indent + itemIndent * (level - 1)

        else
          items.push(item)
          levels.push(level)

    flatten(list)

    wrapper = new LineWrapper(this, options)
    wrapper.on 'line', @_line.bind(this)

  list: (list, x, y, options, wrapper) ->
    options = @_initOptions(x, y, options)

    listType = options.listType or 'bullet'
    unit = Math.round (@_font.ascender / 1000 * @_fontSize)
    midLine = unit / 2
    r = options.bulletRadius or unit / 3
    indent = options.textIndent or if listType is 'bullet' then r * 5 else unit * 2
    itemIndent = options.bulletIndent or if listType is 'bullet' then r * 8 else unit * 2

    level = 1
    items = []
    levels = []
    numbers = []

    flatten = (list) ->
      n = 1
      for item, i in list
        if Array.isArray(item)
          level++
