15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/unicode/scripts.rb', line 15
def self.script(char, format: :long)
require_relative 'scripts/index' unless defined? ::Unicode::Scripts::INDEX
codepoint_depth_offset = char.unpack("U")[0] or
raise(ArgumentError, "Unicode::Scripts.script must be given a valid char")
index_or_value = INDEX[:SCRIPTS]
[0x10000, 0x1000, 0x100, 0x10].each{ |depth|
index_or_value = index_or_value[codepoint_depth_offset / depth]
codepoint_depth_offset = codepoint_depth_offset % depth
unless index_or_value.is_a? Array
res = index_or_value || INDEX[:SCRIPT_ALIASES]["Zzzz"]
return format == :long ? INDEX[:SCRIPT_NAMES][res] : INDEX[:SCRIPT_ALIASES].key(res)
end
}
res = index_or_value[codepoint_depth_offset] || INDEX[:SCRIPT_ALIASES]["Zzzz"]
format == :long ? INDEX[:SCRIPT_NAMES][res] : INDEX[:SCRIPT_ALIASES].key(res)
end
|