Sha256: 10b57d9dea8aa7d346733326e59cd4c0c864b6f8ec98d1ba7bd6ad4f995c3216

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

# coding: utf-8

module Ting
  module Tones
    class Accents < Tone
      class << self

      UNICODE_TONE_GLYPHS={
        :a=>[97, 257, 225, 462, 224],
        :e=>[101, 275, 233, 283, 232],
        :i=>[105, 299, 237, 464, 236],
        :o=>[111, 333, 243, 466, 242],
        :u=>[117, 363, 250, 468, 249],
        :v=>[252, 470, 472, 474, 476]
      }

      def tone_glyph(letter,tone)
        if (u=UNICODE_TONE_GLYPHS[letter.to_sym][tone%MAX_TONE])
          [u].pack('U')
        end
      end

      def add_tone(syll, tone)
        syll = syll.sub('ü','v')
        tone %= MAX_TONE
        case syll
        when /a/
          syll.sub(/a/, tone_glyph(:a,tone))
        when /e/
          syll.sub(/e/, tone_glyph(:e,tone))
        when /o/
          syll.sub(/o/, tone_glyph(:o,tone))
        when /(i|u|v)\z/
          syll.sub($1, tone_glyph($1,tone)).sub('v', 'ü')
        when /(i|u|v)/
          syll.sub($1, tone_glyph($1,tone)).sub('v', 'ü')
        else
          syll
        end
      end

      def peek_tone(syll)
        unpacked = syll.unpack('U*')
        each_tone_glyph do |vowel, tones|
          tone_glyph=unpacked.find {|t| tones.include?(t)}
          normalize( tones.index(tone_glyph) ) if tone_glyph
        end
      end

      # returns [ tone number, syllable without tone ]
      # e.g. ni3 => [ 3, 'ni' ]
      def pop_tone(syll)
        unpacked = syll.unpack('U*')
        each_tone_glyph do |vowel, tones|

          if tone_glyph = unpacked.find {|t| tones.include?(t)}
            unpacked[unpacked.index(tone_glyph)] = vowel.to_s.unpack('U').first
            break [normalize(tones.index(tone_glyph)), unpacked.pack('U*').sub('v', 'ü')]
          end

        end
      end

      private
        def each_tone_glyph
          [:a,:e,:i,:o,:u,:v].each do |v|  #Order is significant
            vowel, tones = v, UNICODE_TONE_GLYPHS[v]
            yield vowel,tones
          end
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ting-0.9.0 lib/ting/tones/accents.rb