Horde_ActiveSync_Wbxml_Decoder::_getToken PHP Method

_getToken() protected method

Get the next start tag, content or end tag
protected _getToken ( ) : array
return array The element array.
    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;
            }
        }
    }