%PDF- %PDF-
Direktori : /www/varak.net/www.varak.net/texy/libs/ |
Current File : //www/varak.net/www.varak.net/texy/libs/TexyHandlerInvocation.php |
<?php /** * Texy! - web text markup-language * -------------------------------- * * Copyright (c) 2004, 2008 David Grudl (http://davidgrudl.com) * * This source file is subject to the GNU GPL license that is bundled * with this package in the file license.txt. * * For more information please see http://texy.info * * @copyright Copyright (c) 2004, 2008 David Grudl * @license GNU GENERAL PUBLIC LICENSE version 2 or 3 * @link http://texy.info * @package Texy * @version $Id: TexyHandlerInvocation.php 218 2008-09-05 05:35:57Z David Grudl $ */ /** * Around advice handlers. * * @author David Grudl * @copyright Copyright (c) 2004, 2008 David Grudl * @package Texy */ final class TexyHandlerInvocation extends TexyObject { /** @var array of callbacks */ private $handlers; /** @var int callback counter */ private $pos; /** @var array */ private $args; /** @var TexyParser */ private $parser; /** * @param array array of callbacks * @param TexyParser * @param array arguments */ public function __construct($handlers, TexyParser $parser, $args) { $this->handlers = $handlers; $this->pos = count($handlers); $this->parser = $parser; array_unshift($args, $this); $this->args = $args; } /** * @param mixed * @return mixed */ public function proceed() { if ($this->pos === 0) { throw new InvalidStateException('No more handlers.'); } if (func_num_args()) { $this->args = func_get_args(); array_unshift($this->args, $this); } $this->pos--; $res = call_user_func_array($this->handlers[$this->pos], $this->args); if ($res === NULL) { throw new UnexpectedValueException("Invalid value returned from handler '" . print_r($this->handlers[$this->pos], TRUE) . "'."); } return $res; } /** * @return TexyParser */ public function getParser() { return $this->parser; } /** * @return Texy */ public function getTexy() { return $this->parser->getTexy(); } /** * PHP garbage collector helper. */ public function free() { $this->handlers = $this->parser = $this->args = NULL; } }