=begin
  tag.rb - Locale::Tag module

  Copyright (C) 2008,2009  Masao Mutoh
 
  You may redistribute it and/or modify it under the same
  license terms as Ruby.
=end

require 'locale/tag/simple'
require 'locale/tag/irregular'
require 'locale/tag/common'
require 'locale/tag/rfc'
require 'locale/tag/cldr'
require 'locale/tag/posix'
require 'locale/util/memoizable'

module Locale

  # Language tag / locale identifiers.
  module Tag
    include Util::Memoizable
    module_function
    # Parse a language tag/locale name and return Locale::Tag
    # object.
    # * tag: a tag as a String. e.g.) ja-Hira-JP
    # * Returns: a Locale::Tag subclass.
    def parse(tag)
      # Common is not used here.
      [Simple, Common, Rfc, Cldr, Posix].each do |parser|
        ret = parser.parse(tag)
        return ret if ret
      end
      Locale::Tag::Irregular.new(tag)
    end
    memoize :parse
  end
end

