Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/Collections/AttributeFilterCollection.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\Items\AttributeFilter;

class
AttributeFilterCollection extends NormalizedCollection
{
   
/**
    * Return a value from this collection
    *
    * @param  string $key
    * @return \s9e\TextFormatter\Configurator\Items\ProgrammableCallback
    */
   
public function get($key)
    {
       
$key = $this->normalizeKey($key);

        if (!
$this->exists($key))
        {
            if (
$key[0] === '#')
            {
               
$this->set($key, self::getDefaultFilter(substr($key, 1)));
            }
            else
            {
               
$this->set($key, new AttributeFilter($key));
            }
        }

       
// Get the filter from the collection
       
$filter = parent::get($key);

       
// Clone it to preserve the original instance
       
$filter = clone $filter;

        return
$filter;
    }

   
/**
    * Get an instance of the default filter for given name
    *
    * @param  string          $filterName Filter name, e.g. "int" or "color"
    * @return AttributeFilter
    */
   
public static function getDefaultFilter($filterName)
    {
       
$filterName = ucfirst(strtolower($filterName));
       
$className  = 's9e\\TextFormatter\\Configurator\\Items\\AttributeFilters\\' . $filterName . 'Filter';

        if (!
class_exists($className))
        {
            throw new
InvalidArgumentException("Unknown attribute filter '" . $filterName . "'");
        }

        return new
$className;
    }

   
/**
    * Normalize the name of an attribute filter
    *
    * @param  string $key
    * @return string
    */
   
public function normalizeKey($key)
    {
       
// Built-in/custom filter, normalized to lowercase
       
if (preg_match('/^#[a-z_0-9]+$/Di', $key))
        {
            return
strtolower($key);
        }

       
// Valid callback
       
if (is_string($key) && is_callable($key))
        {
            return
$key;
        }

        throw new
InvalidArgumentException("Invalid filter name '" . $key . "'");
    }

   
/**
    * Normalize a value to an instance of AttributeFilter
    *
    * @param  callable|AttributeFilter $value
    * @return AttributeFilter
    */
   
public function normalizeValue($value)
    {
        if (
$value instanceof AttributeFilter)
        {
            return
$value;
        }

        if (
is_callable($value))
        {
            return new
AttributeFilter($value);
        }

        throw new
InvalidArgumentException('Argument 1 passed to ' . __METHOD__ . ' must be a valid callback or an instance of s9e\\TextFormatter\\Configurator\\Items\\AttributeFilter');
    }
}