class CharDet::SJISProber
def feed(aBuf)
def feed(aBuf) aLen = aBuf.length for i in (0...aLen) codingState = @codingSM.next_state(aBuf[i,1]) if codingState == EError $stderr << "#{get_charset_name} prober hit error at byte #{i}\n" if $debug @state = ENotMe break elsif codingState == EItsMe @state = EFoundIt break elsif codingState == EStart charLen = @codingSM.get_current_charlen() if i == 0 @lastChar[1] = aBuf[0, 1] @contextAnalyzer.feed(@lastChar[2-charLen, 1], charLen) @distributionAnalyzer.feed(@lastChar, charLen) else @contextAnalyzer.feed(aBuf[i+1-charLen, 2], charLen) @distributionAnalyzer.feed(aBuf[i-1, 2], charLen) end end end @lastChar[0] = aBuf[aLen-1, 1] if get_state() == EDetecting if @contextAnalyzer.got_enough_data() and (get_confidence() > SHORTCUT_THRESHOLD) @state = EFoundIt end end return get_state() end
def get_charset_name
def get_charset_name return "SHIFT_JIS" end
def get_confidence
def get_confidence l = [@contextAnalyzer.get_confidence(), @distributionAnalyzer.get_confidence()] return l.max end
def initialize
def initialize super() @codingSM = CodingStateMachine.new(SJISSMModel) @distributionAnalyzer = SJISDistributionAnalysis.new() @contextAnalyzer = SJISContextAnalysis.new() reset() end
def reset
def reset super() @contextAnalyzer.reset() end