PageRenderTime 47ms CodeModel.GetById 36ms app.highlight 9ms RepoModel.GetById 0ms app.codeStats 1ms

/tools/Ruby/lib/ruby/1.8/rexml/instruction.rb

http://github.com/agross/netopenspace
Ruby | 70 lines | 44 code | 8 blank | 18 comment | 4 complexity | 4e016f54de8d692f44a33b21637b9fe6 MD5 | raw file
 1require "rexml/child"
 2require "rexml/source"
 3
 4module 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
70end