srgs 1.0.1 → 1.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11427469daf0138bcee8940476817a59795e94b4
4
- data.tar.gz: 2dee9400e173605943be165458fff749b02df6c5
3
+ metadata.gz: 78d562ce8bb4d8ecf263c1c97ff74e3149e4ba2f
4
+ data.tar.gz: 58826d3300604e031ab6dce87a589948abd3812b
5
5
  SHA512:
6
- metadata.gz: 66e55b92d117c7b46cb722b0f373b6828e7adcad1132a7df7f69e3bc3acb29d7ed0866e07443def4ec746a95da0d0dadb46ab9a6d2dde88c62021b22162c351f
7
- data.tar.gz: 324530f3b886948a870d4907443c2ec2650a0740a2c84da23eacfd533ccf7b66c156b08a14aae6c88f033cbeaeb96538b094edc4c0c4cdac9e785f4abc31a17b
6
+ metadata.gz: 4b69a52d2570830a940305af7af4db007205c1deca27ff0189d081d09328c53117bad69c9837363093b38ca3c87870d352f000d93aa4a1cc3f03e48f97653171
7
+ data.tar.gz: 4d3719463019e41d9425913970757e65c2513ae9a400efedccce1372c3e40b71c47f388559809c7ac2f5c5a7689609299261563453a46fd30e53f14171363a31
data/README.md CHANGED
@@ -20,9 +20,6 @@ Or install it yourself as:
20
20
 
21
21
  Here's an example file. It will be documented better later
22
22
 
23
- [This](http://msdn.microsoft.com/en-us/library/hh361653.aspx) is a good
24
- reference on how srgs grammars work.
25
-
26
23
  ```ruby
27
24
  require 'srgs'
28
25
 
@@ -53,7 +50,7 @@ module WeatherGrammar
53
50
  tag 'out.day=rules.days;'
54
51
  end
55
52
 
56
- public_rule 'days' do
53
+ public_rule 'sun' do
57
54
  item 'Mycroft when is sun'
58
55
  reference 'riseset'
59
56
  tag 'out.rise_or_set=rules.riseset;'
@@ -64,7 +61,7 @@ module WeatherGrammar
64
61
  public_rule 'topLevel' do
65
62
  one_of do
66
63
  reference_item 'weather'
67
- reference_item 'days'
64
+ reference_item 'sun'
68
65
  end
69
66
  end
70
67
  end
@@ -72,6 +69,51 @@ end
72
69
  ```
73
70
 
74
71
  Running that will print to console the corresponding xml.
72
+ ```xml
73
+ <?xml version="1.0" encoding="UTF-8"?>
74
+ <grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-US" root="toplevel" tag-format="semantics/1.0" version="1.0">
75
+ <rule id="toplevel">
76
+ <one-of>
77
+ <item>
78
+ <ruleref uri="#weather" />
79
+ </item>
80
+ <item>
81
+ <ruleref uri="#sun" />
82
+ </item>
83
+ </one-of>
84
+ </rule>
85
+ <rule id="weather" scope="public">
86
+ <item>Mycroft what is the weather</item>
87
+ <ruleref uri="#days" />
88
+ <tag>out.day=rules.days;</tag>
89
+ </rule>
90
+ <rule id="sun" scope="public">
91
+ <item>Mycroft When is sun</item>
92
+ <ruleref uri="#riseset" />
93
+ <tag>out.rise_or_set=rules.riseset;</tag>
94
+ <ruleref uri="#days" />
95
+ <tag>out.day=rules.days;</tag>
96
+ </rule>
97
+ <rule id="days" scope="private">
98
+ <one-of>
99
+ <item>today</item>
100
+ <item>tomorrow</item>
101
+ <item>currently</item>
102
+ </one-of>
103
+ </rule>
104
+ <rule id="riseset" scope="private">
105
+ <one-of>
106
+ <item>rise</item>
107
+ <item>set</item>
108
+ </one-of>
109
+ </rule>
110
+ </grammar>
111
+ ```
112
+
113
+ ## References
114
+
115
+ * [Speech Recognition Grammar Specification Version 1.0](http://www.w3.org/TR/speech-grammar/#S4.13)
116
+ * [SRGS Grammar XML Reference](http://msdn.microsoft.com/en-us/library/hh361653.aspx)
75
117
 
76
118
  ## Contributing
77
119
 
@@ -9,11 +9,13 @@ module Srgs
9
9
  @grammar = Grammar.new root
10
10
  instance_eval &block
11
11
  @grammar.current_level = nil
12
- puts Srgs.build(@grammar)
12
+ grammar = Srgs.build(@grammar)
13
+ puts grammar
14
+ grammar
13
15
  end
14
16
 
15
- def item(element = '', tag=nil, repeat=nil, repeat_prob = nil, weight = nil, &block)
16
- item = Item.new(element, tag, repeat, repeat_prob, weight)
17
+ def item(element = '', args = {}, &block)
18
+ item = Item.new(element, args[:repeat], args[:repeat_prob], args[:weight])
17
19
  @grammar.current_level << item
18
20
  old_current = @grammar.current_level
19
21
  @grammar.current_level = item
@@ -21,12 +23,12 @@ module Srgs
21
23
  @grammar.current_level = old_current
22
24
  end
23
25
 
24
- def lexicon(uri, type=nil)
25
- @grammar << Lexicon.new(uri, type)
26
+ def lexicon(uri, args = {})
27
+ @grammar << Lexicon.new(uri, args[:type])
26
28
  end
27
29
 
28
- def meta(content, name = nil, http_equiv = nil)
29
- @grammar << Meta.new(content, name, http_equiv)
30
+ def meta(content, args = {})
31
+ @grammar << Meta.new(content, args[:name], args[:http_equiv])
30
32
  end
31
33
 
32
34
  def one_of(&block)
@@ -37,34 +39,38 @@ module Srgs
37
39
  @grammar.current_level = old_current
38
40
  end
39
41
 
40
- def public_rule(id, dynamic= nil, &block)
41
- @grammar.current_level = Rule.new(id, 'public', dynamic)
42
+ def public_rule(id, args = {}, &block)
43
+ @grammar.current_level = Rule.new(id, 'public', args[:dynamic])
42
44
  @grammar << @grammar.current_level
43
45
  instance_eval &block
44
46
  @grammar.current_level = nil
45
47
  end
46
48
 
47
- def private_rule(id, dynamic= nil, &block)
48
- @grammar.current_level = Rule.new(id, 'private', dynamic)
49
+ def private_rule(id, args = {}, &block)
50
+ @grammar.current_level = Rule.new(id, 'private', args[:dynamic])
49
51
  @grammar << @grammar.current_level
50
52
  instance_eval &block
51
53
  @grammar.current_level = nil
52
54
  end
53
55
 
54
- def reference(name, special=nil)
55
- @grammar.current_level << RuleRef.new(name, special)
56
+ def reference(name, args = {})
57
+ @grammar.current_level << RuleRef.new(name, args[:special])
56
58
  end
57
59
 
58
- def reference_item(name, special=nil)
59
- @grammar.current_level << Item.new(RuleRef.new(name, special))
60
+ def reference_item(name, args = {})
61
+ @grammar.current_level << Item.new(RuleRef.new(name, args[:special]))
60
62
  end
61
63
 
62
64
  def tag(text)
63
65
  @grammar.current_level << Tag.new(text)
64
66
  end
65
67
 
66
- def token(text, display=nil, pron = nil)
67
- @grammar.current_level << Token.new(text, display, pron)
68
+ def text(text)
69
+ @grammar.current_level << text
70
+ end
71
+
72
+ def token(text, args = {})
73
+ @grammar.current_level << Token.new(text, args[:display], args[:pron])
68
74
  end
69
75
  end
70
76
  end
@@ -1,10 +1,10 @@
1
1
  module Srgs
2
2
  class Item
3
3
 
4
- attr_accessor :element, :repeat, :repeat_prob, :weight, :tag
4
+ attr_accessor :elements, :repeat, :repeat_prob, :weight
5
5
 
6
- def initialize(element, tag=nil, repeat=nil, repeat_prob = nil, weight = nil)
7
- @element = element
6
+ def initialize(element = '', repeat=nil, repeat_prob = nil, weight = nil)
7
+ @elements = [element]
8
8
  @tag = tag
9
9
  @repeat = repeat
10
10
  @repeat_prob = repeat_prob
@@ -12,8 +12,7 @@ module Srgs
12
12
  end
13
13
 
14
14
  def <<(element)
15
- @tag = element if element.is_a? Tag
16
- @element = element if(element.is_a? Token or element.is_a? String)
15
+ @elements << element
17
16
  self
18
17
  end
19
18
 
@@ -30,19 +30,20 @@ module Srgs
30
30
  set(:repeat, att, item.repeat)
31
31
  set(:'repeat-prob', att, item.repeat_prob)
32
32
  set(:weight, att, item.weight)
33
- if item.element.is_a? Token
34
- xml.item(att) do
35
- tag(item.tag, xml) unless item.tag.nil?
36
- token(item.element, xml)
37
- end
38
- elsif item.element.is_a? RuleRef
39
- xml.item(att) do
40
- tag(item.tag, xml) unless item.tag.nil?
41
- rule_ref(item.element, xml)
42
- end
43
- else
44
- xml.item(item.element, att) do
45
- tag(item.tag, xml) unless item.tag.nil?
33
+ xml.item(att) do
34
+ item.elements.each do |element|
35
+ case element
36
+ when Token
37
+ token(element, xml)
38
+ when RuleRef
39
+ rule_ref(element, xml)
40
+ when Tag
41
+ tag(element, xml)
42
+ when String
43
+ text(element, xml)
44
+ else
45
+ raise "Can't add #{element.class} to item."
46
+ end
46
47
  end
47
48
  end
48
49
  end
@@ -79,16 +80,21 @@ module Srgs
79
80
  set(:'sapi:dynamic', att, rule.dynamic)
80
81
  xml.rule(att) do
81
82
  rule.elements.each do |element|
82
- if element.is_a? Item
83
+ case element
84
+ when Item
83
85
  item(element, xml)
84
- elsif element.is_a? RuleRef
86
+ when RuleRef
85
87
  rule_ref(element, xml)
86
- elsif element.is_a? OneOf
88
+ when OneOf
87
89
  one_of(element, xml)
88
- elsif element.is_a? Token
90
+ when Token
89
91
  token(element, xml)
90
- elsif element.is_a? Tag
92
+ when Tag
91
93
  tag(element, xml)
94
+ when Example
95
+ example(element, xml)
96
+ else
97
+ raise "Can't add #{element.class} to item"
92
98
  end
93
99
  end
94
100
  end
@@ -104,6 +110,10 @@ module Srgs
104
110
  xml.tag tag.text
105
111
  end
106
112
 
113
+ def text(text, xml)
114
+ xml.text text
115
+ end
116
+
107
117
  def token(token, xml)
108
118
  att = {}
109
119
  set(:'sapi:display', att, token.display)
@@ -114,5 +124,4 @@ module Srgs
114
124
  def set(sym, att, value)
115
125
  att[sym] = value unless value.nil?
116
126
  end
117
-
118
- end
127
+ end
@@ -1,3 +1,3 @@
1
1
  module Srgs
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: srgs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - kristenmills
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-24 00:00:00.000000000 Z
11
+ date: 2014-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -78,7 +78,6 @@ files:
78
78
  - lib/srgs/elements/tag.rb
79
79
  - lib/srgs/elements/token.rb
80
80
  - lib/srgs/grammar_builder.rb
81
- - lib/srgs/test.rb
82
81
  - lib/srgs/version.rb
83
82
  - srgs.gemspec
84
83
  homepage: https://github.com/kristenmills/srgs
@@ -106,3 +105,4 @@ signing_key:
106
105
  specification_version: 4
107
106
  summary: A gem for building SRGS/grXML documents.
108
107
  test_files: []
108
+ has_rdoc:
@@ -1,49 +0,0 @@
1
- require 'srgs'
2
-
3
- grammar = Srgs::Grammar.new
4
-
5
- sunriseset = Srgs::Rule.new('riseset')
6
- sunriseset_choices = Srgs::OneOf.new << Srgs::Item.new('rise') << Srgs::Item.new('set')
7
- sunriseset << sunriseset_choices
8
- sunriseset.scope = 'private'
9
-
10
- sunriseset_ref = Srgs::RuleRef.new(sunriseset)
11
-
12
- days = Srgs::Rule.new('days')
13
- days_choices = Srgs::OneOf.new << Srgs::Item.new('today') << Srgs::Item.new('tomorrow') << Srgs::Item.new('currently')
14
- days << days_choices
15
- days.scope = 'private'
16
-
17
- days_ref = Srgs::RuleRef.new(days)
18
-
19
- weather = Srgs::Rule.new('weather')
20
- sun = Srgs::Rule.new('sun')
21
-
22
- question1 = Srgs::Item.new("Mycroft what is the weather");
23
- question2 = Srgs::Item.new("Mycroft When is sun");
24
-
25
- weather << question1
26
- weather << days_ref
27
- weather << Srgs::Tag.new("out.day=rules.days;")
28
- weather.scope = 'public'
29
-
30
- sun << question2
31
- sun << sunriseset_ref
32
- sun << Srgs::Tag.new("out.rise_or_set=rules.riseset;")
33
- sun << days_ref
34
- sun << Srgs::Tag.new("out.day=rules.days;")
35
- sun.scope = 'public'
36
-
37
- top_level = Srgs::Rule.new("toplevel");
38
- top_level_choices = Srgs::OneOf.new
39
- item1 = Srgs::Item.new Srgs::RuleRef.new(weather)
40
- item2 = Srgs::Item.new Srgs::RuleRef.new(sun)
41
- top_level_choices << item1
42
- top_level_choices << item2
43
- top_level << top_level_choices
44
-
45
- grammar << top_level << weather << sun << days << sunriseset
46
-
47
- grammar.root = "toplevel"
48
-
49
- puts Srgs.build(grammar)