class NSWTopo::TreeIndenter

def initialize(items, parts = nil, &block)

def initialize(items, parts = nil, &block)
  @enum = Enumerator.new do |yielder|
    next unless items
    grouped = block_given? ? block.call(items) : items
    grouped.each.with_index do |(item, group), index|
      *new_parts, last_part = parts
      case last_part
      when "├─ " then new_parts << "│  "
      when "└─ " then new_parts << "   "
      end
      new_parts << case index
      when grouped.size - 1 then "└─ "
      else                       "├─ "
      end if parts
      yielder << [new_parts, item]
      TreeIndenter.new(group, new_parts, &block).each(&yielder)
    end
  end
end