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.