Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
God, I hate DTDs. I really do. Why this idiot standard still plagues us is beyond me.
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
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
definition, 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
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
Returns this entity as a string. See write().
# File rexml/entity.rb, line 121
def to_s
rv = ''
write rv
rv
end
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
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
sum = 0
matches.each do |entity_reference|
entity_value = @parent.entity( entity_reference[0] )
if sum + entity_value.bytesize > Document.entity_expansion_text_limit
raise "entity expansion has grown too large"
else
sum += entity_value.bytesize
end
rv.gsub!( /%#{entity_reference.join};/um, entity_value )
end
end
return rv
end
nil
end
Write out a fully formed, correct entity definition (assuming the Entity object itself is valid.)
An object implementing <TT><<<TT> to which the entity will be output
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.