1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
<?php
/**
* $Horde: framework/XML_WBXML/WBXML/ContentHandler.php,v 1.9.10.7 2006/05/01 12:05:15 jan Exp $
*
* Copyright 2003-2006 Anthony Mills <amills@pyramid6.com>
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* From Binary XML Content Format Specification Version 1.3, 25 July 2001
* found at http://www.wapforum.org
*
* @package XML_WBXML
*/
class XML_WBXML_ContentHandler {
var $_currentUri;
var $_output = '';
var $_opaqueHandler;
/**
* Charset.
*/
var $_charset = 'UTF-8';
/**
* WBXML Version.
* 1, 2, or 3 supported
*/
var $_wbxmlVersion = 2;
function XML_WBXML_ContentHandler()
{
$this->_currentUri = &new XML_WBXML_LifoQueue();
}
function raiseError($error)
{
include_once 'PEAR.php';
return PEAR::raiseError($error);
}
function getCharsetStr()
{
return $this->_charset;
}
function setCharset($cs)
{
$this->_charset = $cs;
}
function getVersion()
{
return $this->_wbxmlVersion;
}
function setVersion($v)
{
$this->_wbxmlVersion = 2;
}
function getOutput()
{
return $this->_output;
}
function getOutputSize()
{
return strlen($this->_output);
}
function startElement($uri, $element, $attrs)
{
$this->_output .= '<' . $element;
$currentUri = $this->_currentUri->top();
if (((!$currentUri) || ($currentUri != $uri)) && $uri) {
$this->_output .= ' xmlns="' . $uri . '"';
}
$this->_currentUri->push($uri);
foreach ($attrs as $attr) {
$this->_output .= ' ' . $attr['attribute'] . '="' . $attr['value'] . '"';
}
$this->_output .= '>';
}
function endElement($uri, $element)
{
$this->_output .= '</' . $element . '>';
$this->_currentUri->pop();
}
function characters($str)
{
$this->_output .= $str;
}
function opaque($o)
{
$this->_output .= $o;
}
function setOpaqueHandler($opaqueHandler)
{
$this->_opaqueHandler = $opaqueHandler;
}
function removeOpaqueHandler()
{
unset($this->_opaqueHandler);
}
function createSubHandler()
{
$name = get_class($this); // clone current class
$sh = &new $name();
$sh->setCharset($this->getCharsetStr());
$sh->setVersion($this->getVersion());
return $sh;
}
}
class XML_WBXML_LifoQueue {
var $_queue = array();
function XML_WBXML_LifoQueue()
{
}
function push($obj)
{
$this->_queue[] = $obj;
}
function pop()
{
if (count($this->_queue)) {
return array_pop($this->_queue);
} else {
return null;
}
}
function top()
{
if ($count = count($this->_queue)) {
return $this->_queue[$count - 1];
} else {
return null;
}
}
}
|