Sha256: c48110a61eb8f6912ee451d0ced12df78780539d87d4ca9b5c40f71921b416e8
Contents?: true
Size: 1.73 KB
Versions: 6
Compression:
Stored size: 1.73 KB
Contents
require 'ruby_speech/grxml/matcher' require 'ruby_speech/grxml/element' module RubySpeech module GRXML InvalidChildError = Class.new StandardError MissingReferenceError = Class.new StandardError ReferentialLoopError = Class.new StandardError GRXML_NAMESPACE = 'http://www.w3.org/2001/06/grammar' %w{ builtins grammar rule item one_of ruleref tag token }.each { |f| require "ruby_speech/grxml/#{f}" } def self.draw(attributes = {}, &block) document = Nokogiri::XML::Document.new Grammar.new(document, attributes).tap do |grammar| document.root = grammar.node block_return = grammar.eval_dsl_block &block grammar << block_return if block_return.is_a?(String) end.assert_has_matching_root_rule end def self.import(other) Element.import other end URI_REGEX = /builtin:(?<class>.*)\/(?<type>\w*)(\?)?(?<query>(\w*=\w*;?)*)?/.freeze # # Fetch a builtin grammar by URI # # @param [String] uri The builtin grammar URI of the form "builtin:dtmf/type?param=value" # # @return [RubySpeech::GRXML::Grammar] a grammar from the builtin set # def self.from_uri(uri) match = uri.match(URI_REGEX) raise ArgumentError, "Only builtin grammars are supported" unless match raise ArgumentError, "Only DTMF builtins are supported" unless match[:class] == 'dtmf' type = match[:type] query = {} match[:query].split(';').each do |s| key, value = s.split('=') query[key] = value end raise ArgumentError, "#{type} is an invalid builtin grammar" unless Builtins.respond_to?(type) Builtins.send type, query end end # GRXML end # RubySpeech
Version data entries
6 entries across 6 versions & 1 rubygems