Module: ISOCodes
- Defined in:
- lib/iso_codes.rb
Defined Under Namespace
Classes: IndividualLanguage, Language, Macrolanguage, SpecialSituationLanguage
Constant Summary collapse
- ISO_639_3_VERSION =
Version of the ISO 639-3 code set supported (see www.sil.org/iso639-3/download.asp).
'20110525'
- ISO_639_3_MACROLANGUAGE_MAPPINGS_VERSION =
Version of the ISO 639-3 macrolanguage mappings supported (see www.sil.org/iso639-3/download.asp).
'20100128'
Class Method Summary collapse
-
.all_iso_639_3_codes ⇒ Object
Returns an array containing all ISO 639-3 language codes.
-
.find_iso_639_3_language(code) ⇒ Object
Returns an object describing the language identified by the ISO 639-3 identifier
code
. -
.find_language(code) ⇒ Object
Returns an object describing the language identified by the language code
code
. - .get_data_filename(filename) ⇒ Object
- .load_iso_639_3 ⇒ Object
- .read_data_file(filename, field_count, delimiter, skip_first) ⇒ Object
Class Method Details
.all_iso_639_3_codes ⇒ Object
Returns an array containing all ISO 639-3 language codes.
94 95 96 |
# File 'lib/iso_codes.rb', line 94 def all_iso_639_3_codes @@iso_639_3.keys end |
.find_iso_639_3_language(code) ⇒ Object
Returns an object describing the language identified by the ISO 639-3 identifier code
.
106 107 108 109 110 111 112 113 |
# File 'lib/iso_codes.rb', line 106 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) ⇒ Object
Returns an object describing the language identified by the language code code
.
100 101 102 |
# File 'lib/iso_codes.rb', line 100 def find_language(code) find_iso_639_3_language(code) end |
.get_data_filename(filename) ⇒ Object
121 122 123 |
# File 'lib/iso_codes.rb', line 121 def get_data_filename(filename) File.join(DATA_PATH, filename) end |
.load_iso_639_3 ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/iso_codes.rb', line 136 def load_iso_639_3 data = {} read_data_file("iso-639-3_#{ISO_639_3_VERSION}.tab.gz", 8, "\t", true) do |args| identifier, part2b, part2t, part1, scope, language_type, ref_name, comment = 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_#{ISO_639_3_MACROLANGUAGE_MAPPINGS_VERSION}.tab.gz", 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) ⇒ Object
125 126 127 128 129 130 131 132 133 134 |
# File 'lib/iso_codes.rb', line 125 def read_data_file(filename, field_count, delimiter, skip_first) Zlib::GzipReader.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 |