require 'info-balise'

class AnalyseurXML

  attr_reader :balises

  def initialize()
    reinitialiser
  end

  def reinitialiser()
    @balises = Hash.new
  end

  def balises()
    @balises.keys
  end

  def analyser( s )
    s.each { |l| analyser_ligne( l ) }
  end

  def info( balise )
    @balises[balise]
  end


  ## Methodes privees
  private

  def analyser_ligne( ligne )
    patron_balise = 
      Regexp.new( "(</?(\\w+)\\s*(\\s*(\\w+)\\s*=\\s*\"\\w+\"\\s*)*\\s*/?>)" )

    while ligne =~ patron_balise do
      match = patron_balise.match( ligne )
      balise = match[2]
      @balises[balise] = InfoBalise.new(balise) unless @balises[balise]
      analyser_attributs( balise, match[1] )
      ligne = match.post_match
    end
  end

  def analyser_attributs( balise, attributs )
    patron_attribut = 
      Regexp.new( "(\\w+)\\s*=\\s*\"\\w+\"" )

      while attributs =~ patron_attribut do
        match = patron_attribut.match( attributs )
        @balises[balise].ajouter_attribut( match[1] )
        attributs = match.post_match
      end
  end

end
