module ISOCodes

Constants

DATA_PATH
ISO_639_3_MACROLANGUAGE_MAPPINGS_VERSION

Version of the ISO 639-3 macrolanguage mappings supported.

ISO_639_3_VERSION

Version of the ISO 639-3 code set supported.

VERSION

Public Class Methods

all_iso_639_3_codes() click to toggle source

Returns an array containing all ISO 639-3 language codes.

# File lib/iso_codes.rb, line 87
def all_iso_639_3_codes
  @@iso_639_3.keys
end
find_iso_639_3_language(code) click to toggle source

Returns an object describing the language identified by the ISO 639-3 identifier code.

# File lib/iso_codes.rb, line 99
def find_iso_639_3_language(code)
  if @@iso_639_3.has_key?(code)
    klass, *rest = @@iso_639_3[code]
    klass.new(*rest)
  else
    nil
  end
end
find_language(code) click to toggle source

Returns an object describing the language identified by the language code code.

# File lib/iso_codes.rb, line 93
def find_language(code)
  find_iso_639_3_language(code)
end

Private Class Methods

get_data_filename(filename) click to toggle source
# File lib/iso_codes.rb, line 114
def get_data_filename(filename)
  File.join(DATA_PATH, filename)
end
load_iso_639_3() click to toggle source
# File lib/iso_codes.rb, line 129
def load_iso_639_3
  data = {}

  read_data_file("iso-639-3.tab", 8, "\t", true) do |args|
    identifier, part2b, part2t, part1, scope, language_type, ref_name, _ = args

    # Sanity checks
    raise ArgumentError, "missing identifier" if identifier.nil?
    raise ArgumentError, "missing reference name" if ref_name.nil?

    klass =
      case scope
      when 'I'
        IndividualLanguage
      when 'M'
        Macrolanguage
      when 'S'
        SpecialSituationLanguage
      else
        raise ArgumentError, "invalid scope"
      end

    language_type =
      case language_type
      when 'L'
        :living
      when 'E'
        :extinct
      when 'A'
        :ancient
      when 'H'
        :historic
      when 'C'
        :constructed
      when 'S'
        :special
      else
        raise ArgumentError, "invalid language type"
      end

    data[identifier] = [klass, nil, nil, identifier, part2b, part2t, part1, language_type, ref_name]
  end

  read_data_file("iso-639-3-macrolanguages.tab", 3, "\t", true) do |args|
    macrolanguage_identifier, individual_language_identifier, status = args

    case status
    when 'R'
      next #FIXME
    when 'A'
    else
      raise ArgumentError, "invalid status"
    end

    # Add macrolanguage to the individual language
    raise "individual language already has a macrolanguage " if data[individual_language_identifier][2]
    data[individual_language_identifier][2] = macrolanguage_identifier

    # Add individual language to macrolanguage
    data[macrolanguage_identifier][1] ||= []
    data[macrolanguage_identifier][1] << individual_language_identifier
  end

  data.each_pair { |k, v| v.freeze }

  data
end
read_data_file(filename, field_count, delimiter, skip_first) { |chomp.split(delimiter, field_count)| ... } click to toggle source
# File lib/iso_codes.rb, line 118
def read_data_file(filename, field_count, delimiter, skip_first)
  File.open(get_data_filename(filename)).each_line do |l|
    if skip_first
      skip_first = false
      next
    end

    yield l.chomp.split(delimiter, field_count)
  end
end