ruby_speech 2.1.2 → 2.2.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +8 -0
- data/README.md +23 -0
- data/ext/ruby_speech/extconf.rb +3 -1
- data/ext/ruby_speech/ruby_speech.c +4 -1
- data/lib/ruby_speech.rb +6 -19
- data/lib/ruby_speech/generic_element.rb +141 -29
- data/lib/ruby_speech/grxml.rb +16 -22
- data/lib/ruby_speech/grxml/element.rb +6 -6
- data/lib/ruby_speech/grxml/grammar.rb +29 -12
- data/lib/ruby_speech/grxml/item.rb +13 -0
- data/lib/ruby_speech/grxml/matcher.rb +5 -1
- data/lib/ruby_speech/grxml/one_of.rb +4 -0
- data/lib/ruby_speech/grxml/rule.rb +10 -0
- data/lib/ruby_speech/grxml/token.rb +3 -0
- data/lib/ruby_speech/nlsml.rb +3 -9
- data/lib/ruby_speech/ssml.rb +20 -22
- data/lib/ruby_speech/ssml/audio.rb +17 -0
- data/lib/ruby_speech/ssml/desc.rb +4 -0
- data/lib/ruby_speech/ssml/element.rb +5 -3
- data/lib/ruby_speech/ssml/emphasis.rb +17 -0
- data/lib/ruby_speech/ssml/mark.rb +2 -0
- data/lib/ruby_speech/ssml/p.rb +21 -0
- data/lib/ruby_speech/ssml/phoneme.rb +2 -0
- data/lib/ruby_speech/ssml/prosody.rb +15 -0
- data/lib/ruby_speech/ssml/s.rb +20 -0
- data/lib/ruby_speech/ssml/say_as.rb +2 -0
- data/lib/ruby_speech/ssml/speak.rb +19 -1
- data/lib/ruby_speech/ssml/sub.rb +2 -0
- data/lib/ruby_speech/ssml/voice.rb +19 -0
- data/lib/ruby_speech/version.rb +1 -1
- data/ruby_speech.gemspec +2 -3
- data/spec/ruby_speech/grxml/grammar_spec.rb +35 -30
- data/spec/ruby_speech/grxml/item_spec.rb +8 -6
- data/spec/ruby_speech/grxml/one_of_spec.rb +7 -3
- data/spec/ruby_speech/grxml/rule_spec.rb +14 -12
- data/spec/ruby_speech/grxml/ruleref_spec.rb +5 -3
- data/spec/ruby_speech/grxml/tag_spec.rb +6 -2
- data/spec/ruby_speech/grxml/token_spec.rb +6 -2
- data/spec/ruby_speech/grxml_spec.rb +57 -69
- data/spec/ruby_speech/ssml/audio_spec.rb +20 -16
- data/spec/ruby_speech/ssml/break_spec.rb +14 -10
- data/spec/ruby_speech/ssml/desc_spec.rb +9 -5
- data/spec/ruby_speech/ssml/emphasis_spec.rb +17 -13
- data/spec/ruby_speech/ssml/mark_spec.rb +7 -3
- data/spec/ruby_speech/ssml/p_spec.rb +18 -14
- data/spec/ruby_speech/ssml/phoneme_spec.rb +10 -6
- data/spec/ruby_speech/ssml/prosody_spec.rb +29 -25
- data/spec/ruby_speech/ssml/s_spec.rb +17 -13
- data/spec/ruby_speech/ssml/say_as_spec.rb +11 -7
- data/spec/ruby_speech/ssml/speak_spec.rb +48 -32
- data/spec/ruby_speech/ssml/sub_spec.rb +9 -5
- data/spec/ruby_speech/ssml/voice_spec.rb +23 -19
- data/spec/ruby_speech/ssml_spec.rb +64 -63
- data/spec/spec_helper.rb +0 -3
- metadata +10 -31
- data/lib/ruby_speech/xml.rb +0 -11
@@ -3,57 +3,60 @@ require 'spec_helper'
|
|
3
3
|
module RubySpeech
|
4
4
|
describe SSML do
|
5
5
|
describe "#draw" do
|
6
|
+
let(:doc) { Nokogiri::XML::Document.new }
|
7
|
+
|
6
8
|
it "should create an SSML document" do
|
7
|
-
expected_doc = SSML::Speak.new
|
9
|
+
expected_doc = SSML::Speak.new doc
|
8
10
|
SSML.draw.should == expected_doc
|
11
|
+
SSML.draw.document.xpath('ns:speak', ns: 'http://www.w3.org/2001/10/synthesis').size.should == 1
|
9
12
|
end
|
10
13
|
|
11
14
|
it "can draw with a language" do
|
12
|
-
expected_doc = SSML::Speak.new language: 'pt-BR'
|
15
|
+
expected_doc = SSML::Speak.new doc, language: 'pt-BR'
|
13
16
|
SSML.draw(language: 'pt-BR').should == expected_doc
|
14
17
|
end
|
15
18
|
|
16
19
|
describe "when the return value of the block is a string" do
|
17
20
|
it "should be inserted into the document" do
|
18
|
-
expected_doc = SSML::Speak.new(:content => "Hi, I'm Fred")
|
21
|
+
expected_doc = SSML::Speak.new(doc, :content => "Hi, I'm Fred")
|
19
22
|
SSML.draw { "Hi, I'm Fred" }.should == expected_doc
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
23
26
|
describe "when the return value of the block is not a string" do
|
24
27
|
it "should not be inserted into the document" do
|
25
|
-
expected_doc = SSML::Speak.new
|
28
|
+
expected_doc = SSML::Speak.new doc
|
26
29
|
SSML.draw { :foo }.should == expected_doc
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
30
33
|
describe "when inserting a string" do
|
31
34
|
it "should work" do
|
32
|
-
expected_doc = SSML::Speak.new(:content => "Hi, I'm Fred")
|
35
|
+
expected_doc = SSML::Speak.new(doc, :content => "Hi, I'm Fred")
|
33
36
|
SSML.draw { string "Hi, I'm Fred" }.should == expected_doc
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
37
40
|
it "should allow other SSML elements to be inserted in the document" do
|
38
|
-
|
39
|
-
expected_doc
|
40
|
-
|
41
|
-
doc.should == expected_doc
|
41
|
+
expected_doc = SSML::Speak.new doc
|
42
|
+
expected_doc << SSML::Voice.new(doc, :gender => :male, :name => 'fred')
|
43
|
+
SSML.draw { voice :gender => :male, :name => 'fred' }.should == expected_doc
|
42
44
|
end
|
43
45
|
|
44
46
|
it "should allow nested block return values" do
|
47
|
+
expected_doc = SSML::Speak.new doc
|
48
|
+
expected_doc << SSML::Voice.new(doc, :gender => :male, :name => 'fred', :content => "Hi, I'm Fred.")
|
49
|
+
|
45
50
|
doc = RubySpeech::SSML.draw do
|
46
51
|
voice :gender => :male, :name => 'fred' do
|
47
52
|
"Hi, I'm Fred."
|
48
53
|
end
|
49
54
|
end
|
50
|
-
expected_doc = SSML::Speak.new
|
51
|
-
expected_doc << SSML::Voice.new(:gender => :male, :name => 'fred', :content => "Hi, I'm Fred.")
|
52
55
|
doc.should == expected_doc
|
53
56
|
end
|
54
57
|
|
55
58
|
it "should allow nested SSML elements" do
|
56
|
-
|
59
|
+
drawn_doc = RubySpeech::SSML.draw do
|
57
60
|
voice :gender => :male, :name => 'fred' do
|
58
61
|
string "Hi, I'm Fred. The time is currently "
|
59
62
|
say_as :interpret_as => 'date', :format => 'dmy' do
|
@@ -61,11 +64,12 @@ module RubySpeech
|
|
61
64
|
end
|
62
65
|
end
|
63
66
|
end
|
64
|
-
|
65
|
-
voice
|
66
|
-
|
67
|
+
|
68
|
+
voice = SSML::Voice.new(doc, :gender => :male, :name => 'fred', :content => "Hi, I'm Fred. The time is currently ")
|
69
|
+
voice << SSML::SayAs.new(doc, :interpret_as => 'date', :format => 'dmy', :content => "01/02/1960")
|
70
|
+
expected_doc = SSML::Speak.new doc
|
67
71
|
expected_doc << voice
|
68
|
-
|
72
|
+
drawn_doc.should == expected_doc
|
69
73
|
end
|
70
74
|
|
71
75
|
it "should allow accessing methods defined outside the block" do
|
@@ -73,12 +77,8 @@ module RubySpeech
|
|
73
77
|
'bar'
|
74
78
|
end
|
75
79
|
|
76
|
-
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
expected_doc = SSML::Speak.new :content => foo
|
81
|
-
doc.should == expected_doc
|
80
|
+
expected_doc = SSML::Speak.new doc, :content => foo
|
81
|
+
SSML.draw { string foo }.should == expected_doc
|
82
82
|
end
|
83
83
|
|
84
84
|
describe "embedding" do
|
@@ -109,7 +109,7 @@ module RubySpeech
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it "SSML elements" do
|
112
|
-
element = SSML::Emphasis.new(:content => "HELLO?")
|
112
|
+
element = SSML::Emphasis.new(doc, :content => "HELLO?")
|
113
113
|
|
114
114
|
doc = RubySpeech::SSML.draw do
|
115
115
|
voice :gender => :male, :name => 'fred' do
|
@@ -148,19 +148,19 @@ module RubySpeech
|
|
148
148
|
end
|
149
149
|
|
150
150
|
it "should properly escape string input" do
|
151
|
-
|
151
|
+
drawn_doc = RubySpeech::SSML.draw do
|
152
152
|
voice { string "I <3 nachos." }
|
153
153
|
voice { "I <3 nachos." }
|
154
154
|
end
|
155
|
-
expected_doc = SSML::Speak.new
|
155
|
+
expected_doc = SSML::Speak.new doc
|
156
156
|
2.times do
|
157
|
-
expected_doc << SSML::Voice.new(:native_content => "I <3 nachos.")
|
157
|
+
expected_doc << SSML::Voice.new(doc, :native_content => "I <3 nachos.")
|
158
158
|
end
|
159
|
-
|
159
|
+
drawn_doc.should == expected_doc
|
160
160
|
end
|
161
161
|
|
162
162
|
it "should allow all permutations of possible nested SSML elements" do
|
163
|
-
|
163
|
+
drawn_doc = RubySpeech::SSML.draw do
|
164
164
|
string "Hello world."
|
165
165
|
ssml_break
|
166
166
|
audio :src => "hello" do
|
@@ -211,56 +211,57 @@ module RubySpeech
|
|
211
211
|
end
|
212
212
|
end
|
213
213
|
end
|
214
|
-
expected_doc = SSML::Speak.new(:content => "Hello world.")
|
215
|
-
expected_doc << SSML::Break.new
|
216
|
-
audio = SSML::Audio.new(:src => "hello", :content => "HELLO?")
|
217
|
-
audio << SSML::Break.new
|
218
|
-
audio << SSML::Audio.new(:src => "hello")
|
219
|
-
audio << SSML::Emphasis.new
|
220
|
-
audio << SSML::Prosody.new
|
221
|
-
audio << SSML::SayAs.new(:interpret_as => 'date')
|
222
|
-
audio << SSML::Voice.new
|
214
|
+
expected_doc = SSML::Speak.new(doc, :content => "Hello world.")
|
215
|
+
expected_doc << SSML::Break.new(doc)
|
216
|
+
audio = SSML::Audio.new(doc, :src => "hello", :content => "HELLO?")
|
217
|
+
audio << SSML::Break.new(doc)
|
218
|
+
audio << SSML::Audio.new(doc, :src => "hello")
|
219
|
+
audio << SSML::Emphasis.new(doc)
|
220
|
+
audio << SSML::Prosody.new(doc)
|
221
|
+
audio << SSML::SayAs.new(doc, :interpret_as => 'date')
|
222
|
+
audio << SSML::Voice.new(doc)
|
223
223
|
expected_doc << audio
|
224
|
-
emphasis = SSML::Emphasis.new(:content => "HELLO?")
|
225
|
-
emphasis << SSML::Break.new
|
226
|
-
emphasis << SSML::Audio.new(:src => "hello")
|
227
|
-
emphasis << SSML::Emphasis.new
|
228
|
-
emphasis << SSML::Prosody.new
|
229
|
-
emphasis << SSML::SayAs.new(:interpret_as => 'date')
|
230
|
-
emphasis << SSML::Voice.new
|
224
|
+
emphasis = SSML::Emphasis.new(doc, :content => "HELLO?")
|
225
|
+
emphasis << SSML::Break.new(doc)
|
226
|
+
emphasis << SSML::Audio.new(doc, :src => "hello")
|
227
|
+
emphasis << SSML::Emphasis.new(doc)
|
228
|
+
emphasis << SSML::Prosody.new(doc)
|
229
|
+
emphasis << SSML::SayAs.new(doc, :interpret_as => 'date')
|
230
|
+
emphasis << SSML::Voice.new(doc)
|
231
231
|
expected_doc << emphasis
|
232
|
-
prosody = SSML::Prosody.new(:rate => :slow, :content => "H...E...L...L...O?")
|
233
|
-
prosody << SSML::Break.new
|
234
|
-
prosody << SSML::Audio.new(:src => "hello")
|
235
|
-
prosody << SSML::Emphasis.new
|
236
|
-
prosody << SSML::Prosody.new
|
237
|
-
prosody << SSML::SayAs.new(:interpret_as => 'date')
|
238
|
-
prosody << SSML::Voice.new
|
232
|
+
prosody = SSML::Prosody.new(doc, :rate => :slow, :content => "H...E...L...L...O?")
|
233
|
+
prosody << SSML::Break.new(doc)
|
234
|
+
prosody << SSML::Audio.new(doc, :src => "hello")
|
235
|
+
prosody << SSML::Emphasis.new(doc)
|
236
|
+
prosody << SSML::Prosody.new(doc)
|
237
|
+
prosody << SSML::SayAs.new(doc, :interpret_as => 'date')
|
238
|
+
prosody << SSML::Voice.new(doc)
|
239
239
|
expected_doc << prosody
|
240
|
-
expected_doc << SSML::SayAs.new(:interpret_as => 'date', :format => 'dmy', :content => "01/02/1960")
|
241
|
-
voice = SSML::Voice.new(:gender => :male, :name => 'fred', :content => "Hi, I'm Fred. The time is currently ")
|
242
|
-
voice << SSML::SayAs.new(:interpret_as => 'date', :format => 'dmy', :content => "01/02/1960")
|
243
|
-
voice << SSML::Break.new
|
244
|
-
voice << SSML::Audio.new(:src => "hello")
|
245
|
-
voice << SSML::Emphasis.new(:content => "I'm so old")
|
246
|
-
voice << SSML::Prosody.new(:rate => :fast, :content => "And yet so spritely!")
|
247
|
-
voice << SSML::Voice.new(:age => 12, :content => "And I'm young Fred")
|
240
|
+
expected_doc << SSML::SayAs.new(doc, :interpret_as => 'date', :format => 'dmy', :content => "01/02/1960")
|
241
|
+
voice = SSML::Voice.new(doc, :gender => :male, :name => 'fred', :content => "Hi, I'm Fred. The time is currently ")
|
242
|
+
voice << SSML::SayAs.new(doc, :interpret_as => 'date', :format => 'dmy', :content => "01/02/1960")
|
243
|
+
voice << SSML::Break.new(doc)
|
244
|
+
voice << SSML::Audio.new(doc, :src => "hello")
|
245
|
+
voice << SSML::Emphasis.new(doc, :content => "I'm so old")
|
246
|
+
voice << SSML::Prosody.new(doc, :rate => :fast, :content => "And yet so spritely!")
|
247
|
+
voice << SSML::Voice.new(doc, :age => 12, :content => "And I'm young Fred")
|
248
248
|
expected_doc << voice
|
249
|
-
|
249
|
+
drawn_doc.should == expected_doc
|
250
250
|
end
|
251
251
|
end
|
252
252
|
|
253
253
|
describe "importing nested tags" do
|
254
|
-
let(:
|
254
|
+
let(:doc) { Nokogiri::XML::Document.new }
|
255
|
+
let(:say_as) { SSML::SayAs.new doc, :interpret_as => 'date', :format => 'dmy', :content => "01/02/1960" }
|
255
256
|
let(:string) { "Hi, I'm Fred. The time is currently " }
|
256
257
|
let :voice do
|
257
|
-
SSML::Voice.new(:gender => :male, :name => 'fred', :content => string).tap do |voice|
|
258
|
+
SSML::Voice.new(doc, :gender => :male, :name => 'fred', :content => string).tap do |voice|
|
258
259
|
voice << say_as
|
259
260
|
end
|
260
261
|
end
|
261
262
|
|
262
263
|
let :document do
|
263
|
-
SSML::Speak.new.tap { |doc| doc << voice }.to_s
|
264
|
+
SSML::Speak.new(doc).tap { |doc| doc << voice }.to_s
|
264
265
|
end
|
265
266
|
|
266
267
|
let(:import) { SSML.import document }
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,55 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_speech
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Langfeld
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: niceogiri
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.1'
|
20
|
-
- - '>='
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 1.1.2
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.1'
|
30
|
-
- - '>='
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 1.1.2
|
33
13
|
- !ruby/object:Gem::Dependency
|
34
14
|
name: nokogiri
|
35
15
|
requirement: !ruby/object:Gem::Requirement
|
36
16
|
requirements:
|
37
17
|
- - ~>
|
38
18
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1.
|
40
|
-
- - '>='
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 1.5.6
|
19
|
+
version: '1.6'
|
43
20
|
type: :runtime
|
44
21
|
prerelease: false
|
45
22
|
version_requirements: !ruby/object:Gem::Requirement
|
46
23
|
requirements:
|
47
24
|
- - ~>
|
48
25
|
- !ruby/object:Gem::Version
|
49
|
-
version: '1.
|
50
|
-
- - '>='
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 1.5.6
|
26
|
+
version: '1.6'
|
53
27
|
- !ruby/object:Gem::Dependency
|
54
28
|
name: activesupport
|
55
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -57,6 +31,9 @@ dependencies:
|
|
57
31
|
- - '>='
|
58
32
|
- !ruby/object:Gem::Version
|
59
33
|
version: 3.0.7
|
34
|
+
- - <
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 5.0.0
|
60
37
|
type: :runtime
|
61
38
|
prerelease: false
|
62
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -64,6 +41,9 @@ dependencies:
|
|
64
41
|
- - '>='
|
65
42
|
- !ruby/object:Gem::Version
|
66
43
|
version: 3.0.7
|
44
|
+
- - <
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 5.0.0
|
67
47
|
- !ruby/object:Gem::Dependency
|
68
48
|
name: bundler
|
69
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -265,7 +245,6 @@ files:
|
|
265
245
|
- lib/ruby_speech/ssml/sub.rb
|
266
246
|
- lib/ruby_speech/ssml/voice.rb
|
267
247
|
- lib/ruby_speech/version.rb
|
268
|
-
- lib/ruby_speech/xml.rb
|
269
248
|
- lib/ruby_speech/xml/language.rb
|
270
249
|
- ruby_speech.gemspec
|
271
250
|
- spec/ruby_speech/grxml/grammar_spec.rb
|