protected function _getToken()
{
// Get the data from the input stream
$element = array();
while (1) {
$byte = $this->_getByte();
if (!isset($byte)) {
break;
}
switch ($byte) {
case self::SWITCH_PAGE:
$this->_tagcp = $this->_getByte();
continue;
case self::END:
$element[self::EN_TYPE] = self::EN_TYPE_ENDTAG;
return $element;
case self::ENTITY:
$entity = $this->_getMBUInt();
$element[self::EN_TYPE] = self::EN_TYPE_CONTENT;
$element[self::EN_CONTENT] = $this->entityToCharset($entity);
return $element;
case self::STR_I:
$element[self::EN_TYPE] = self::EN_TYPE_CONTENT;
$element[self::EN_CONTENT] = $this->_getTermStr();
return $element;
case self::LITERAL:
$element[self::EN_TYPE] = self::EN_TYPE_STARTTAG;
$element[self::EN_TAG] = $this->_getStringTableEntry($this->_getMBUInt());
$element[self::EN_FLAGS] = 0;
return $element;
case self::EXT_I_0:
case self::EXT_I_1:
case self::EXT_I_2:
$this->_getTermStr();
// Ignore extensions
continue;
case self::PI:
// Ignore PI
$this->_getAttributes();
continue;
case self::LITERAL_C:
$element[self::EN_TYPE] = self::EN_TYPE_STARTTAG;
$element[self::EN_TAG] = $this->_getStringTableEntry($this->_getMBUInt());
$element[self::EN_FLAGS] = self::EN_FLAGS_CONTENT;
return $element;
case self::EXT_T_0:
case self::EXT_T_1:
case self::EXT_T_2:
$this->_getMBUInt();
// Ingore extensions;
continue;
case self::STR_T:
$element[self::EN_TYPE] = self::EN_TYPE_CONTENT;
$element[self::EN_CONTENT] = $this->_getStringTableEntry($this->_getMBUInt());
return $element;
case self::LITERAL_A:
$element[self::EN_TYPE] = self::EN_TYPE_STARTTAG;
$element[self::EN_TAG] = $this->_getStringTableEntry($this->_getMBUInt());
$element[self::EN_ATTRIBUTES] = $this->_getAttributes();
$element[self::EN_FLAGS] = self::EN_FLAGS_ATTRIBUTES;
return $element;
case self::EXT_0:
case self::EXT_1:
case self::EXT_2:
continue;
case self::OPAQUE:
$length = $this->_getMBUInt();
$element[self::EN_TYPE] = self::EN_TYPE_CONTENT;
$element[self::EN_CONTENT] = $this->_getOpaque($length);
return $element;
case self::LITERAL_AC:
$element[self::EN_TYPE] = self::EN_TYPE_STARTTAG;
$element[self::EN_TAG] = $this->_getStringTableEntry($this->_getMBUInt());
$element[self::EN_ATTRIBUTES] = $this->_getAttributes();
$element[self::EN_FLAGS] = self::EN_FLAGS_ATTRIBUTES | self::EN_FLAGS_CONTENT;
return $element;
default:
$element[self::EN_TYPE] = self::EN_TYPE_STARTTAG;
$element[self::EN_TAG] = $this->_getMapping($this->_tagcp, $byte & 0x3f);
$element[self::EN_FLAGS] = ($byte & 0x80 ? self::EN_FLAGS_ATTRIBUTES : 0) | ($byte & 0x40 ? self::EN_FLAGS_CONTENT : 0);
if ($byte & 0x80) {
$element[self::EN_ATTRIBUTES] = $this->_getAttributes();
}
return $element;
}
}
}