woocommerce/apigen/libs/Texy/texy/libs/TexyHandlerInvocation.php

106 lines
1.7 KiB
PHP

<?php
/**
* Texy! - human-readable text to HTML converter.
*
* @copyright Copyright (c) 2004, 2010 David Grudl
* @license GNU GENERAL PUBLIC LICENSE version 2 or 3
* @link http://texy.info
* @package Texy
*/
/**
* Around advice handlers.
*
* @copyright Copyright (c) 2004, 2010 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;
}
}