* io.c (rb_open_file): encoding in mode string was ignored if perm is
[ruby-svn.git] / lib / rexml / instruction.rb
blobc16b894b4ae88599f77bf92dddeb788b6d1c2c9b
1 require "rexml/child"
2 require "rexml/source"
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 = '\?>'
11                 # target is the "name" of the Instruction; IE, the "tag" in <?tag ...?>
12                 # content is everything else.
13                 attr_accessor :target, :content
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
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
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
62     def node_type
63       :processing_instruction
64     end
66     def inspect
67       "<?p-i #{target} ...?>"
68     end
69         end
70 end