}
}
}
//处理以input为开始的一个新hit
Hit hit = Dictionary.matchInMainDict(segmentBuff, context.getCursor() , 1);
if(hit.isMatch()){//匹配成词
//判断是否有不可识别的词段
if(context.getCursor() > doneIndex + 1){
//输出并处理从doneIndex+1 到 context.getCursor()- 1之间的未知
processUnknown(segmentBuff , context , doneIndex + 1 , context.getCursor()- 1);
}
//输出当前的词
Lexeme newLexeme = new Lexeme(context.getBuffOffset() , context.getCursor() , 1 , Lexeme.TYPE_CJK_NORMAL);
context.addLexeme(newLexeme);
//更新doneIndex,标识已处理
if(doneIndex < context.getCursor()){
doneIndex = context.getCursor();
}
if(hit.isPrefix()){//同时也是前缀
//向词段队列增加新的Hit
hitList.add(hit);
}
}else if(hit.isPrefix()){//前缀,未匹配成词
//向词段队列增加新的Hit
hitList.add(hit);
}else if(hit.isUnmatch()){//不匹配,当前的input不是词,也不是词前缀,将其视为分割性的字符
if(doneIndex >= context.getCursor()){
//当前不匹配的字符已经被处理过了,不需要再processUnknown
return;
}
//输出从doneIndex到当前字符(含当前字符)之间的未知词
processUnknown(segmentBuff , context , doneIndex + 1 , context.getCursor());
//更新doneIndex,标识已处理
doneIndex = context.getCursor();
}
}else {//输入的不是中文(CJK)字符
if(hitList.size() > 0
&& doneIndex < context.getCursor() - 1){
for(Hit hit : hitList){
//判断是否有不可识别的词段
if(doneIndex < hit.getEnd()){
//输出并处理从doneIndex+1 到 seg.end之间的未知词段
processUnknown(segmentBuff , context , doneIndex + 1 , hit.getEnd());
}
}
}
//清空词段队列
hitList.clear();
//更新doneIndex,标识已处理
if(doneIndex < context.getCursor()){
doneIndex = context.getCursor();
}
}
//缓冲区结束临界处理
if(context.getCursor() == context.getAvailable() - 1){ //读取缓冲区结束的最后一个字符
if( hitList.size() > 0 //队列中还有未处理词段
&& doneIndex < context.getCursor()){//最后一个字符还未被输出过
for(Hit hit : hitList){
//判断是否有不可识别的词段
if(doneIndex < hit.getEnd() ){
//输出并处理从doneIndex+1 到 seg.end之间的未知词段
processUnknown(segmentBuff , context , doneIndex + 1 , hit.getEnd());
}
}
}
//清空词段队列
hitList.clear();;