def possible_words str,i,found_in_normal_dic
      ret=[]
      first_char_type=@char_types.type_for str[i].ord
      return [] if found_in_normal_dic && !first_char_type.invoke?

      collect_result ret,first_char_type,str[i..i] if first_char_type.length > 0

      l=1
      str[(i+1)..-1].each_codepoint{|cp|
        break unless first_char_type.accept? cp
        l+=1
        collect_result ret,first_char_type,str[i...(i+l)] if first_char_type.length >= l
      }
      collect_result ret,first_char_type,str[i...(i+l)] if first_char_type.group? && first_char_type.length < l

      ret
    end
def possible_words str,i,found_in_normal_dic
      ret=[]
      first_char_type=@char_types.type_for str[i].ord
      return [] if found_in_normal_dic && !first_char_type.invoke?

      collect_result ret,first_char_type,str[i..i] if first_char_type.length > 0

      l=1
      str[(i+1)..-1].each_codepoint{|cp|
        break unless first_char_type.accept? cp
        l+=1
        collect_result ret,first_char_type,str[i...(i+l)] if first_char_type.length >= l
      }
      collect_result ret,first_char_type,str[i...(i+l)] if first_char_type.group? && first_char_type.length < l

      ret
    end
CharTypes -> Features ->
 -> [Word]