require "nokogiri"

module Pricecut
  class MarkdownVisitor
    attr_reader :output

    def initialize
      @output = ""
    end

    def visit(node)
      begin
        element = Pricecut::Elements.const_get(node.name.capitalize)
        element.new(self, node).output!
      rescue NameError
        # Unsupported element, continue visiting children.
        visit_children(node)
      end

      self
    end

    def append_output(string)
      @output << string
    end

    def visit_children(node)
      node.children.each {|child| child.accept(self) }
    end
  end
end