Use clearer variable names and keep at most one additional tag for a language

This commit is contained in:
afrmtbl 2021-08-03 20:22:08 -04:00
parent a6e9e34405
commit 3a759bdafb

View File

@ -476,37 +476,39 @@ struct LanguageEntry
class InvalidLanguageEntry < Exception class InvalidLanguageEntry < Exception
end end
property tag, subtags, quality : Float64 property tag : String
property region : String?
property quality : Float64
def initialize(@tag : String, @subtags : Array(String), @quality : Float64) def initialize(@tag : String, @region : String?, @quality : Float64)
@quality = @quality.clamp(0.0, 1.0) @quality = @quality.clamp(0.0, 1.0)
end end
def to_s(io) def to_s(io)
io << tag io << @tag
unless subtags.empty? if @region
io << '-' << @subtags.join '-' io << '-' << @region
end end
end end
def self.from_string(language_str : String) : self def self.from_string(language_str : String) : self
range_and_quality = language_str.split ';' locale_and_quality = language_str.split ';'
raise LanguageEntry::InvalidLanguageEntry.new if range_and_quality.empty? raise LanguageEntry::InvalidLanguageEntry.new if locale_and_quality.empty?
if range_and_quality[1]? if quality_str = locale_and_quality[1]?
quality = parse_quality(range_and_quality[1]) quality = parse_quality(quality_str)
else else
quality = 1.00 quality = 1.00
end end
language_range = range_and_quality[0] locale = locale_and_quality[0]
tags = language_range.split '-' parts = locale.split '-'
language_tag = tags[0] tag = parts[0]
subtags = tags[1..] region = parts[1]?
return LanguageEntry.new(language_tag, subtags, quality) return LanguageEntry.new(tag, region, quality)
end end
private def self.parse_quality(quality_str : String) : Float64 private def self.parse_quality(quality_str : String) : Float64