flowplayer flash flv no longer work, move to mp4
[booh] / lib / booh / rexml / instruction.rb
1 require "booh/rexml/child"
2 require "booh/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                 def write writer, indent=-1, transitive=false, ie_hack=false
42                         indent(writer, indent)
43                         writer << START.sub(/\\/u, '')
44                         writer << @target
45                         writer << ' '
46                         writer << @content
47                         writer << STOP.sub(/\\/u, '')
48                 end
49
50                 # @return true if other is an Instruction, and the content and target
51                 # of the other matches the target and content of this object.
52                 def ==( other )
53                         other.kind_of? Instruction and
54                         other.target == @target and
55                         other.content == @content
56                 end
57
58     def node_type
59       :processing_instruction
60     end
61
62     def inspect
63       "<?p-i #{target} ...?>"
64     end
65         end
66 end