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