*/
class BIFE_Parser {
/**
- * Output string.
+ * Top level widget.
*
- * @var string $output
+ * @var BIFE_Widget $root
* @access public
*/
- var $output;
+ var $root;
/**
* XML parser resource.
var $parser;
/**
- * Template to use to render the parsed file.
+ * BIFE widgets stack.
*
- * @var HTML_Template_Sigma $template
+ * @var array $stack
* @access public
*/
- var $template;
+ var $stack;
/**
- * BIFE widgets stack.
- *
- * @var array $stack
+ * @var string $fallback
* @access public
*/
- var $stack;
+ var $fallback;
// ~X2C
/**
* Constructor.
*
- * @param HTML_Template_Sigma &$template Template to use to render the widgets.
+ * @param string $fallback Fallback class name (none if empty).
*
* @return void
* @access public
*/
- function BIFE_Parser(&$template) // ~X2C
+ function BIFE_Parser($fallback = '') // ~X2C
{
- $this->__construct($template);
+ $this->__construct($fallback);
}
// -X2C
/**
* Constructor.
*
- * @param HTML_Template_Sigma &$template Template to use to render the widgets.
+ * @param string $fallback Fallback class name (none if empty).
*
* @return void
* @access public
*/
- function __construct(&$template) // ~X2C
+ function __construct($fallback = '') // ~X2C
{
$this->stack = array();
- $this->output = '';
+ $this->root = null;
$this->parser = xml_parser_create();
- $this->template =& $template;
+ $this->fallback = $fallback;
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, 'startElement', 'endElement');
xml_set_character_data_handler($this->parser, 'characterData');
{
$class = "BIFE_$name";
if (!class_exists($class)) {
- include_once 'BIFE/' . ucfirst(strtolower($name)) . '.php';
+ @include_once 'BIFE/' . ucfirst(strtolower($name)) . '.php';
}
if (class_exists($class)) {
$obj =& new $class($attrs);
}
$this->stack[] =& $obj;
} else {
- trigger_error("Class not found '$class'.", E_USER_ERROR);
+ if ($this->fallback) {
+ $class = $this->fallback;
+ $obj =& new $class($name, $attrs);
+ if (!is_a($obj, 'bife_fallback')) {
+ trigger_error("Class '$class' is not a BIFE_Fallback.", E_USER_WARNING);
+ }
+ $this->stack[] =& $obj;
+ } else {
+ trigger_error("Class not found '$class'.", E_USER_ERROR);
+ }
}
}
// -X2C
end($this->stack);
$parent =& $this->stack[key($this->stack)];
if ($parent) {
- $parent->addContents($current->render($this->template));
+ $parent->addContents($current);
} else {
- $this->output = $current->render($this->template);
+ $this->root =& $current;
}
}
// -X2C
// +X2C Operation 37
/**
- * Parse a XML file returning the rendered output.
+ * Parse a XML file with a complete and valid XML document.
*
* @param string $filename Filename to parse.
*
- * @return void
+ * @return &BIFE_Widget
* @access public
*/
- function parseFile($filename) // ~X2C
+ function &parseFile($filename) // ~X2C
{
if ($fp = @fopen($filename, "r")) {
while ($data = fread($fp, 4096)) {
E_USER_WARNING);
}
fclose($fp);
+ return $this->root;
}
// -X2C
- // +X2C Operation 38
+
+ // +X2C Operation 74
/**
- * Get rendered output.
+ * Parse a XML string with a complete and valid XML document.
+ *
+ * @param string $data XML data to parse.
*
- * @return string
+ * @return &BIFE_Widget
* @access public
*/
- function getOutput() // ~X2C
+ function &parseString($data) // ~X2C
{
- return $this->output;
+ $this->parse($data, true);
+ return $this->root;
}
// -X2C
} // -X2C Class :Parser
-?>
+?>
\ No newline at end of file