public void search(CharSequence text, int start, WordDic wdic, List<ViterbiNode> result) {
	final char ch = text.charAt(start);
	final CharCategory.Category ct = category.category(ch);

	if(result.isEmpty()==false && ct.invoke==false)
	    return;
	
	final boolean isSpace = ct.id==spaceId;
	final int limit = Math.min(text.length(), ct.length+start);
	int i=start;
	for(; i < limit; i++) { 
	    wdic.searchFromTrieId(ct.id, start, (i-start)+1, isSpace, result);
	    if(i+1!=limit && category.isCompatible(ch, text.charAt(i+1)) == false)
		return;
	}
	
	if(ct.group && i < text.length()) {
	    for(; i < text.length(); i++)
		if(category.isCompatible(ch, text.charAt(i)) == false) {
		    wdic.searchFromTrieId(ct.id, start, i-start, isSpace, result);
		    return;
		}
	    wdic.searchFromTrieId(ct.id, start, text.length()-start, isSpace, result);
	}
    }