File: rexml/instruction.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: REXML#4
  class: Instruction#7
inherits from
  Child ( REXML )
has properties
constant: START #8
constant: STOP #9
attribute: target [RW] #13
attribute: content [RW] #13
method: initialize / 2 #24
method: clone #37
method: write #44
method: == / 1 #56
method: node_type #62
method: inspect #66

Class Hierarchy

Object ( Builtin-Module )
Child ( REXML )
  Instruction    #7

Code

   1  require "rexml/child"
   2  require "rexml/source"
   3 
   4  module REXML
   5    # Represents an XML Instruction; IE, <? ... ?>
   6    # TODO: Add parent arg (3rd arg) to constructor
   7    class Instruction < Child
   8      START = '<\?'
   9      STOP = '\?>'
  10 
  11      # target is the "name" of the Instruction; IE, the "tag" in <?tag ...?>
  12      # content is everything else.
  13      attr_accessor :target, :content
  14 
  15      # Constructs a new Instruction
  16      # @param target can be one of a number of things.  If String, then 
  17      # the target of this instruction is set to this.  If an Instruction,
  18      # then the Instruction is shallowly cloned (target and content are
  19      # copied).  If a Source, then the source is scanned and parsed for
  20      # an Instruction declaration.
  21      # @param content Must be either a String, or a Parent.  Can only
  22      # be a Parent if the target argument is a Source.  Otherwise, this
  23      # String is set as the content of this instruction.
  24      def initialize(target, content=nil)
  25        if target.kind_of? String
  26          super()
  27          @target = target
  28          @content = content
  29        elsif target.kind_of? Instruction
  30          super(content)
  31          @target = target.target
  32          @content = target.content
  33        end
  34        @content.strip! if @content
  35      end
  36 
  37      def clone
  38        Instruction.new self
  39      end
  40 
  41      # == DEPRECATED
  42      # See the rexml/formatters package
  43      #
  44      def write writer, indent=-1, transitive=false, ie_hack=false
  45        Kernel.warn( "#{self.class.name}.write is deprecated" )
  46        indent(writer, indent)
  47        writer << START.sub(/\\/u, '')
  48        writer << @target
  49        writer << ' '
  50        writer << @content
  51        writer << STOP.sub(/\\/u, '')
  52      end
  53 
  54      # @return true if other is an Instruction, and the content and target
  55      # of the other matches the target and content of this object.
  56      def ==( other )
  57        other.kind_of? Instruction and
  58        other.target == @target and
  59        other.content == @content
  60      end
  61 
  62      def node_type
  63        :processing_instruction
  64      end
  65 
  66      def inspect
  67        "<?p-i #{target} ...?>"
  68      end
  69    end
  70  end