Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/Collections/FilterChain.php
<?php

/**
* @package   s9e\TextFormatter
* @copyright Copyright (c) 2010-2021 The s9e authors
* @license   http://www.opensource.org/licenses/mit-license.php The MIT License
*/
namespace s9e\TextFormatter\Configurator\Collections;

use
InvalidArgumentException;
use
s9e\TextFormatter\Configurator\Helpers\FilterHelper;
use
s9e\TextFormatter\Configurator\Items\Filter;
use
s9e\TextFormatter\Configurator\Items\ProgrammableCallback;

abstract class
FilterChain extends NormalizedList
{
   
/**
    * Get the name of the filter class
    *
    * @return string
    */
   
abstract protected function getFilterClassName();

   
/**
    * Test whether this filter chain contains given callback
    *
    * @param  callable $callback
    * @return bool
    */
   
public function containsCallback(callable $callback)
    {
       
// Normalize the callback
       
$pc = new ProgrammableCallback($callback);
       
$callback = $pc->getCallback();
        foreach (
$this->items as $filter)
        {
            if (
$callback === $filter->getCallback())
            {
                return
true;
            }
        }

        return
false;
    }

   
/**
    * Normalize a value into an TagFilter instance
    *
    * @param  mixed  $value Either a valid callback or an instance of TagFilter
    * @return Filter        Normalized filter
    */
   
public function normalizeValue($value)
    {
        if (
is_string($value) && strpos($value, '(') !== false)
        {
            return
$this->createFilter($value);
        }

       
$className = $this->getFilterClassName();
        if (
$value instanceof $className)
        {
            return
$value;
        }

        if (!
is_callable($value))
        {
            throw new
InvalidArgumentException('Filter ' . var_export($value, true) . ' is neither callable nor an instance of ' . $className);
        }

        return new
$className($value);
    }

   
/**
    * Create and return a filter
    *
    * @param  string $filterString
    * @return Filter
    */
   
protected function createFilter($filterString)
    {
       
$config = FilterHelper::parse($filterString);
       
$filter = $this->normalizeValue($config['filter']);
        if (isset(
$config['params']))
        {
           
$filter->resetParameters();
            foreach (
$config['params'] as [$type, $value])
            {
               
$methodName = 'addParameterBy' . $type;
               
$filter->$methodName($value);
            }
        }

        return
$filter;
    }
}