# File nqxml/tokenizer.rb, line 555
 def nextEntityTag
	    while @currInput.pos >= @currInput.length
		@inputStack.pop()
		@currInput = @inputStack.last
	    end

	    sourceStartPos = @currInput.pos
	    skipChars(8)	# eat '<!ENTITY'

	    skipSpaces()

	    errorStrExtra = ''
	    type = GENERAL_ENTITY:GENERAL_ENTITY
	    if peekMatches?('%') # it's a parameter entity definition
		skipChar(1)	# eat '%'
		skipSpaces()
		type = PARAMETER_ENTITY:PARAMETER_ENTITY
		errorStrExtra = '% '
	    end

	    name = nextName()
	    skipSpaces()

	    # Page 39 ofspec: if GE def, EntityValue | (ExternalID
	    # NDataDecl) if PE def, EntityValue | ExternalID

	    entityValue = nil
	    externalId = nil
	    ndataName = nil
	    if peekMatches?('SYSTEM') || peekMatches?('PUBLIC')
		externalId = nextExternalId('ENTITY')
		skipSpaces()
		if type == GENERAL_ENTITY:GENERAL_ENTITY
		    # NDATA
		    if peekMatches?('NDATA')
			skipChars(5)
			skipSpaces()
			ndataName = nextName()
		    end
		end
	    else		# EntityValue
		# Parse character refs and parameter refs at the same time,
		# but not general entity refs.
		entityValue = replaceParamRefs(nextQuotedLiteral(name))
		entityValue = NQXML.replaceCharacterRefs(entityValue)
	    end
	    skipSpaces()

	    if !peekMatches?('>')
		str = "missing '>' after ENTITY #{errorStrExtra}" +
		    "'#{name}' value"
		raise ParserError.new(str, self)
	    end
	    skipChar()		# eat '>'

	    src = @currInput.string[sourceStartPos ... @currInput.pos]
	    entityTag = nil
	    if type == PARAMETER_ENTITY:PARAMETER_ENTITY
		entityTag = ParameterEntityTag.new(name, entityValue,
						   externalId, src)
	    else
		entityTag = GeneralEntityTag.new(name, entityValue, externalId,
						 ndataName, src)
	    end

	    # Add to list of parameter or internal entities for future
	    # substitution. Warn the user if it has already been defined.
	    entityHash = (type == PARAMETER_ENTITY:PARAMETER_ENTITY ? @paramEntities :
			  @internalEntities)
	    if entityHash[name]
		$stderr.puts "warning: ENTITY #{errorStrExtra}'#{name}'" +
		    " already defined; first definition will be used"
	    elsif entityValue
		entityHash[name] = entityValue
	    else
		entityHash[name] = resolveSystemLiteral(externalId)
	    end
	    
	    return entityTag
	end