# File lib/rchardet/hebrewprober.rb, line 192 def feed(aBuf) # Final letter analysis for logical-visual decision. # Look for evidence that the received buffer is either logical Hebrew or # visual Hebrew. # The following cases are checked: # 1) A word longer than 1 letter, ending with a final letter. This is an # indication that the text is laid out "naturally" since the final letter # really appears at the end. +1 for logical score. # 2) A word longer than 1 letter, ending with a Non-Final letter. In normal # Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, should not end with # the Non-Final form of that letter. Exceptions to this rule are mentioned # above in isNonFinal(). This is an indication that the text is laid out # backwards. +1 for visual score # 3) A word longer than 1 letter, starting with a final letter. Final letters # should not appear at the beginning of a word. This is an indication that # the text is laid out backwards. +1 for visual score. # # The visual score and logical score are accumulated throughout the text and # are finally checked against each other in GetCharSetName(). # No checking for final letters in the middle of words is done since that case # is not an indication for either Logical or Visual text. # # We automatically filter out all 7-bit characters (replace them with spaces) # so the word boundary detection works properly. [MAP] if get_state() == ENotMe # Both model probers say it's not them. No reason to continue. return ENotMe end aBuf = filter_high_bit_only(aBuf) for cur in aBuf.split(' ') if cur == ' ' # We stand on a space - a word just ended if @_mBeforePrev != ' ' # next-to-last char was not a space so self._mPrev is not a 1 letter word if is_final(@_mPrev) # case (1) [-2:not space][-1:final letter][cur:space] @_mFinalCharLogicalScore += 1 elsif is_non_final(@_mPrev) # case (2) [-2:not space][-1:Non-Final letter][cur:space] @_mFinalCharVisualScore += 1 end end else # Not standing on a space if (@_mBeforePrev == ' ') and (is_final(@_mPrev)) and (cur != ' ') # case (3) [-2:space][-1:final letter][cur:not space] @_mFinalCharVisualScore += 1 end end @_mBeforePrev = @_mPrev @_mPrev = cur end # Forever detecting, till the end or until both model probers return eNotMe (handled above) return EDetecting end