lib/ting/reader.rb

Summary

Maintainability
A
25 mins
Test Coverage
module Ting
  class Reader
    include Procable

    def initialize(conv, tone)
      @conv = conv.to_s
      @tone = Tones.const_get Ting.camelize(tone.to_s)
    end

    def parse(str)
      Conversions.tokenize(str).map do |token, pos|
        tone, syll = @tone.pop_tone(token)
        tsyll = Conversions.parse(@conv, syll)
        ini, fin = tsyll.initial, tsyll.final
        unless tone && fin && ini
          raise ParseError.new(token, pos),"Illegal syllable <#{token}> in input <#{str}> at position #{pos}."
        end
        tsyll + tone
      end
    rescue Object => e
      raise ParseError.new(str, 0, e), "Parsing of #{str.inspect} failed : #{e}"
    end

    alias :<< :parse
    alias :call :parse
  end
end