module RussianMetaphone::Filter::BreathConsonants

Оглушение согласных в слабой позиции

Constants

REZONANTS
VOICED
VOICED_VS_VOICELESS
VOICELESS

Public Class Methods

filter(string, options = {}) click to toggle source
# File lib/russian_metaphone/filter/breath_consonants.rb, line 12
def filter(string, options = {})
  options[:skip_if_before_rezonant] = false if !options.has_key?(:skip_if_before_rezonant)
  previous_char = nil

  string.each_char.each_with_index do |current_char, ind|
    if VOICED.include?(previous_char) && 
      (
        VOICELESS.include?(current_char) || 
        (!options[:skip_if_before_rezonant] && REZONANTS.include?(current_char))
    )
    string[ind-1] = VOICED_VS_VOICELESS[previous_char]
    end
    previous_char = current_char
  end

  # Звонкие согласные превращаются в глухие в конце слова
  string[string.length-1] = VOICED_VS_VOICELESS[previous_char] if VOICED.include?(previous_char)

  string
end

Private Instance Methods

filter(string, options = {}) click to toggle source
# File lib/russian_metaphone/filter/breath_consonants.rb, line 12
def filter(string, options = {})
  options[:skip_if_before_rezonant] = false if !options.has_key?(:skip_if_before_rezonant)
  previous_char = nil

  string.each_char.each_with_index do |current_char, ind|
    if VOICED.include?(previous_char) && 
      (
        VOICELESS.include?(current_char) || 
        (!options[:skip_if_before_rezonant] && REZONANTS.include?(current_char))
    )
    string[ind-1] = VOICED_VS_VOICELESS[previous_char]
    end
    previous_char = current_char
  end

  # Звонкие согласные превращаются в глухие в конце слова
  string[string.length-1] = VOICED_VS_VOICELESS[previous_char] if VOICED.include?(previous_char)

  string
end