phonology 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,16 +10,22 @@ module Phonology
10
10
  # Get an instance, building its set from a list IPA characters.
11
11
  def self.from_ipa(*chars)
12
12
  chars = chars.flatten.map {|char| char.unpack("U*")}
13
- new Features::SETS.select {|key, val| chars.include? val}
13
+ new Hash[Features::SETS.select {|key, val| chars.include? val}]
14
14
  end
15
15
 
16
16
  def initialize(sets)
17
17
  @sets = sets
18
18
  end
19
19
 
20
- # Given an IPA symbol, return a corresponding set of distinctive features.
21
- def features(symbol)
22
- @sets.key(symbol.unpack("U*"))
20
+ if RUBY_VERSION < "1.9"
21
+ # Given an IPA symbol, return a corresponding set of distinctive features.
22
+ def features(symbol)
23
+ @sets.index(symbol.unpack("U*"))
24
+ end
25
+ else
26
+ def features(symbol)
27
+ @sets.key(symbol.unpack("U*"))
28
+ end
23
29
  end
24
30
 
25
31
  # Given a set of features, return an IPA symbol
@@ -41,31 +47,31 @@ module Phonology
41
47
  # features.
42
48
  def with(*features)
43
49
  pos, neg = mangle_args(*features)
44
- self.class.new(@sets.select do |key, val|
50
+ self.class.new(Hash[@sets.select do |key, val|
45
51
  !key.intersection(pos).empty?
46
- end).without_any(neg)
52
+ end]).without_any(neg)
47
53
  end
48
54
 
49
55
  # Return feature sets that include all of the given features
50
56
  def with_all(*features)
51
57
  pos, neg = mangle_args(*features)
52
- self.class.new(@sets.select do |key, val|
58
+ self.class.new(Hash[@sets.select do |key, val|
53
59
  pos.subset?(key)
54
- end).without_any(neg)
60
+ end]).without_any(neg)
55
61
  end
56
62
 
57
63
  # Return an instance of Sounds whose sets exclude any of the given
58
64
  # features.
59
65
  def without(*features)
60
66
  features = setify(*features)
61
- self.class.new @sets.select {|key, val| !features.subset?(key)}
67
+ self.class.new Hash[@sets.select {|key, val| !features.subset?(key)}]
62
68
  end
63
69
 
64
70
  # Return an instance of Sounds whose sets exclude all of the given
65
71
  # features.
66
72
  def without_any(*features)
67
73
  features = setify(*features)
68
- self.class.new @sets.select {|key, val| key.intersection(features).empty?}
74
+ self.class.new Hash[@sets.select {|key, val| key.intersection(features).empty?}]
69
75
  end
70
76
 
71
77
  private
@@ -73,7 +79,7 @@ module Phonology
73
79
  def mangle_args(*args)
74
80
  pos = setify(*args)
75
81
  neg = extract_negations(pos)
76
- [pos.select {|f| f !~ /\A(non_|un)/}.compact.to_set, neg]
82
+ [pos.select {|f| f.to_s !~ /\A(non_|un)/}.compact.to_set, neg]
77
83
  end
78
84
 
79
85
  def setify(*args)
@@ -81,7 +87,7 @@ module Phonology
81
87
  end
82
88
 
83
89
  def extract_negations(set)
84
- Features.expand(*set.map {|feat| feat =~ /\A(non_|un)([a-z_]*)\z/ && $2.to_sym}.compact)
90
+ val = Features.expand(*set.map {|feat| feat.to_s =~ /\A(non_|un)([a-z_]*)\z/ && $2.to_sym}.compact)
85
91
  end
86
92
 
87
93
  end
@@ -9,6 +9,10 @@ module Phonology
9
9
  @sounds.__send__(sym, *args, &block)
10
10
  end
11
11
 
12
+ def to_a
13
+ @sounds
14
+ end
15
+
12
16
  def initialize(arg = nil)
13
17
  # String of ipa symbols
14
18
  if arg.kind_of? String
@@ -12,7 +12,7 @@ module Phonology
12
12
  end
13
13
 
14
14
  def to_a
15
- [onset, rime].flatten
15
+ [onset.to_a, rime.to_a].flatten
16
16
  end
17
17
 
18
18
  def valid?
@@ -1,3 +1,3 @@
1
1
  module Phonology
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
data/test/sound_test.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require File.expand_path("../test_helper", __FILE__)
2
3
 
3
4
  class SoundTest < Test::Unit::TestCase
@@ -49,7 +50,7 @@ class SoundTest < Test::Unit::TestCase
49
50
  test "should add/remove rounding" do
50
51
  sound = Sound.new("a")
51
52
  sound << :rounded
52
- assert_equal "\u0276", sound.symbol
53
+ assert_equal "ɶ", sound.symbol
53
54
  sound >> :rounded
54
55
  assert_equal "a", sound.symbol
55
56
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phonology
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 17
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 6
9
- version: 0.0.6
9
+ - 7
10
+ version: 0.0.7
10
11
  platform: ruby
11
12
  authors:
12
13
  - Norman Clarke
@@ -60,6 +61,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
60
61
  requirements:
61
62
  - - ">="
62
63
  - !ruby/object:Gem::Version
64
+ hash: 3
63
65
  segments:
64
66
  - 0
65
67
  version: "0"
@@ -68,6 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
70
  requirements:
69
71
  - - ">="
70
72
  - !ruby/object:Gem::Version
73
+ hash: 3
71
74
  segments:
72
75
  - 0
73
76
  version: "0"