require 'ruby_speech/ssml/element'

module RubySpeech
  module SSML
    ##
    # The sub element is employed to indicate that the text in the alias attribute value replaces the contained text for pronunciation. This allows a document to contain both a spoken and written form. The required alias attribute specifies the string to be spoken instead of the enclosed string. The processor should apply text normalization to the alias value.
    #
    # The sub element can only contain text (no elements).
    #
    # http://www.w3.org/TR/speech-synthesis/#S3.1.10
    #
    class Sub < Element

      register :sub

      VALID_CHILD_TYPES = [Nokogiri::XML::Text, String].freeze

      ##
      # Indicates the string to be spoken instead of the enclosed string
      #
      # @return [String]
      #
      def alias
        read_attr :alias
      end

      ##
      # @param [String] other the string to be spoken instead of the enclosed string
      #
      def alias=(other)
        self[:alias] = other
      end

      def <<(arg)
        raise InvalidChildError, "A Sub can only accept Strings as children" unless VALID_CHILD_TYPES.include? arg.class
        super
      end

      def eql?(o)
        super o, :alias
      end
    end # Sub
  end # SSML
end # RubySpeech
