lib/ruby_speech/grxml/ruleref.rb
module RubySpeech
module GRXML
##
#
# The ruleref element is an empty element which points to another rule expansion in the grammar document.
#
# http://www.w3.org/TR/speech-grammar/#S2.2
#
# Every rule definition has a local name that must be unique within the scope of the grammar in which it is defined. A rulename must match the "Name" Production of XML 1.0 [XML ยง2.3] and be a legal XML ID. Section 3.1 documents the rule definition mechanism and the legal naming of rules.
#
# The ruleref has three attributes: uri, special and type. There can be one and only one of the uri or special attribute specified on any given ruleref element.
#
# The uri attribute contains named identified named rule being referenced
#
# optional 'type' attribute specifies the media type for the uri
#
class Ruleref < Element
register :ruleref
##
# XML URI: in the XML Form of this specification any URI is provided as an attribute to an element; for example the ruleref and lexicon elements.
#
# @return [String]
#
def uri
read_attr :uri
end
##
# @param [String]
#
# @raises ArgumentError if t is nota positive numeric value
#
def uri=(u)
raise ArgumentError, "A Ruleref can only take uri or special" if special
self[:uri] = u
end
##
# special...
#
# @return [String]
#
def special
read_attr :special
end
##
# @param [String]
#
# TODO: raise ArgumentError if not a valid special...
#
def special=(sp)
raise ArgumentError, "A Ruleref can only take uri or special" if uri
raise ArgumentError, "The Ruleref#special method only takes :NULL, :VOID, and :GARBAGE" unless %w{NULL VOID GARBAGE}.include? sp.to_s
self[:special] = sp
end
def <<(*args)
raise InvalidChildError, "A Ruleref cannot contain children"
end
def eql?(o)
super o, :uri, :special
end
end # Rule
end # GRXML
end # RubySpeech