In Files

  • rexml/entity.rb

REXML::Entity

God, I hate DTDs. I really do. Why this idiot standard still plagues us is beyond me.

Attributes

external[R]
name[R]
ndata[R]
pubid[R]
ref[R]

Public Class Methods

matches?(string) click to toggle source

Evaluates whether the given string matchs an entity definition, returning true if so, and false otherwise.

 
               # File rexml/entity.rb, line 68
def Entity::matches? string
        (ENTITYDECL =~ string) == 0
end
            
new(stream, value=nil, parent=nil, reference=false) click to toggle source

Create a new entity. Simple entities can be constructed by passing a name, value to the constructor; this creates a generic, plain entity reference. For anything more complicated, you have to pass a Source to the constructor with the entity definiton, or use the accessor methods. WARNING: There is no validation of entity state except when the entity is read from a stream. If you start poking around with the accessors, you can easily create a non-conformant Entity. The best thing to do is dump the stupid DTDs and use XMLSchema instead.

e = Entity.new( 'amp', '&' )
 
               # File rexml/entity.rb, line 35
def initialize stream, value=nil, parent=nil, reference=false
        super(parent)
        @ndata = @pubid = @value = @external = nil
        if stream.kind_of? Array
                @name = stream[1]
                if stream[-1] == '%'
                        @reference = true 
                        stream.pop
                else
                        @reference = false
                end
                if stream[2] =~ /SYSTEM|PUBLIC/
                        @external = stream[2]
                        if @external == 'SYSTEM'
                                @ref = stream[3]
                                @ndata = stream[4] if stream.size == 5
                        else
                                @pubid = stream[3]
                                @ref = stream[4]
                        end
                else
                        @value = stream[2]
                end
        else
                @reference = reference
                @external = nil
                @name = stream
                @value = value
        end
end
            

Public Instance Methods

normalized() click to toggle source

Returns the value of this entity unprocessed – raw. This is the normalized value; that is, with all %ent; and &ent; entities intact

 
               # File rexml/entity.rb, line 87
def normalized
        @value
end
            
to_s() click to toggle source

Returns this entity as a string. See write().

 
               # File rexml/entity.rb, line 121
def to_s
        rv = ''
        write rv
        rv
end
            
unnormalized() click to toggle source

Evaluates to the unnormalized value of this entity; that is, replacing all entities – both %ent; and &ent; entities. This differs from +value()+ in that value only replaces %ent; entities.

 
               # File rexml/entity.rb, line 75
def unnormalized
        document.record_entity_expansion unless document.nil?
        v = value()
        return nil if v.nil?
        @unnormalized = Text::unnormalize(v, parent)
        @unnormalized
end
            
value() click to toggle source

Returns the value of this entity. At the moment, only internal entities are processed. If the value contains internal references (IE, %blah;), those are replaced with their values. IE, if the doctype contains:

<!ENTITY % foo "bar">
<!ENTITY yada "nanoo %foo; nanoo>

then:

doctype.entity('yada').value   #-> "nanoo bar nanoo"
 
               # File rexml/entity.rb, line 136
def value
        if @value
                matches = @value.scan(PEREFERENCE_RE)
                rv = @value.clone
                if @parent
                        matches.each do |entity_reference|
                                entity_value = @parent.entity( entity_reference[0] )
                                rv.gsub!( /%#{entity_reference};/um, entity_value )
                        end
                end
                return rv
        end
        nil
end
            
write(out, indent=-1) click to toggle source

Write out a fully formed, correct entity definition (assuming the Entity object itself is valid.)

out

An object implementing <TT>&lt;&lt;<TT> to which the entity will be output

indent

DEPRECATED and ignored

 
               # File rexml/entity.rb, line 99
def write out, indent=-1
        out << '<!ENTITY '
        out << '% ' if @reference
        out << @name
        out << ' '
        if @external
                out << @external << ' '
                if @pubid
                        q = @pubid.include?('"')?"'":'"'
                        out << q << @pubid << q << ' '
                end
                q = @ref.include?('"')?"'":'"'
                out << q << @ref << q
                out << ' NDATA ' << @ndata if @ndata
        else
                q = @value.include?('"')?"'":'"'
                out << q << @value << q
        end
        out << '>'
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus