In Files
- rexml/entity.rb
 
Parent
Methods
Included Modules
Class/Module Index
          ![show/hide quicksearch [+]](../images/find.png)
        
        - Array
 - Fixnum
 - Float
 - Object
 - REXML
 - REXML::AttlistDecl
 - REXML::Attribute
 - REXML::Attributes
 - REXML::CData
 - REXML::Child
 - REXML::Comment
 - REXML::DTD
 - REXML::DTD::AttlistDecl
 - REXML::DTD::ElementDecl
 - REXML::DTD::EntityDecl
 - REXML::DTD::NotationDecl
 - REXML::DTD::Parser
 - REXML::Declaration
 - REXML::DocType
 - REXML::Document
 - REXML::Element
 - REXML::ElementDecl
 - REXML::Elements
 - REXML::Encoding
 - REXML::Entity
 - REXML::EntityConst
 - REXML::ExternalEntity
 - REXML::Formatters
 - REXML::Formatters::Default
 - REXML::Formatters::Pretty
 - REXML::Formatters::Transitive
 - REXML::Functions
 - REXML::IOSource
 - REXML::Instruction
 - REXML::Light
 - REXML::Light::Node
 - REXML::Namespace
 - REXML::Node
 - REXML::NotationDecl
 - REXML::Output
 - REXML::Parent
 - REXML::ParseException
 - REXML::Parsers
 - REXML::Parsers::BaseParser
 - REXML::Parsers::LightParser
 - REXML::Parsers::PullEvent
 - REXML::Parsers::PullParser
 - REXML::Parsers::SAX2Parser
 - REXML::Parsers::StreamParser
 - REXML::Parsers::TreeParser
 - REXML::Parsers::UltraLightParser
 - REXML::Parsers::XPathParser
 - REXML::QuickPath
 - REXML::SAX2Listener
 - REXML::Security
 - REXML::Source
 - REXML::SourceFactory
 - REXML::StreamListener
 - REXML::SyncEnumerator
 - REXML::Text
 - REXML::UndefinedNamespaceException
 - REXML::Validation
 - REXML::Validation::Choice
 - REXML::Validation::Event
 - REXML::Validation::Interleave
 - REXML::Validation::OneOrMore
 - REXML::Validation::Optional
 - REXML::Validation::Ref
 - REXML::Validation::RelaxNG
 - REXML::Validation::Sequence
 - REXML::Validation::State
 - REXML::Validation::ValidationException
 - REXML::Validation::Validator
 - REXML::Validation::ZeroOrMore
 - REXML::XMLDecl
 - REXML::XMLTokens
 - REXML::XPath
 - REXML::XPathParser
 - Symbol
 
REXML::Entity
God, I hate DTDs. I really do. Why this idiot standard still plagues us is beyond me.
Constants
Public Class Methods
Evaluates whether the given string matches an entity definition, returning true if so, and false otherwise.
 
               # File rexml/entity.rb, line 69
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 36
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
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 88
def normalized
  @value
end
             
            Returns this entity as a string. See write().
 
               # File rexml/entity.rb, line 122
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 76
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 137
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 > Security.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.)
- out
 - 
An object implementing <TT><<<TT> to which the entity will be output
 - indent
 - 
DEPRECATED and ignored
 
 
               # File rexml/entity.rb, line 100
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