require_relative "blocks/constants" module Unicode module Blocks def self.blocks(string) res = [] string.each_char{ |char| block_name = block(char) res << block_name unless res.include?(block_name) } res.sort end class << self; alias of blocks; end def self.block(char) require_relative 'blocks/index' unless defined? ::Unicode::Blocks::INDEX codepoint = char.unpack("U")[0] or raise(ArgumentError, "Unicode::Blocks.block must be given a valid char") block_info = INDEX.bsearch{ |block_info| codepoint <= block_info[1] } codepoint >= block_info[0] ? block_info[2] : "No_Block" end def self.names require_relative 'blocks/index' unless defined? ::Unicode::Blocks::INDEX INDEX.map(&:last) end end end