Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/Collections/AttributePreprocessorCollection.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\RegexpParser;
use
s9e\TextFormatter\Configurator\Items\AttributePreprocessor;
use
s9e\TextFormatter\Configurator\Items\Regexp;
use
s9e\TextFormatter\Configurator\JavaScript\RegexpConvertor;
use
s9e\TextFormatter\Configurator\Validators\AttributeName;

class
AttributePreprocessorCollection extends Collection
{
   
/**
    * Add an attribute preprocessor
    *
    * @param  string $attrName Original name
    * @param  string $regexp   Preprocessor's regexp
    * @return AttributePreprocessor
    */
   
public function add($attrName, $regexp)
    {
       
$attrName = AttributeName::normalize($attrName);

       
$k = serialize([$attrName, $regexp]);
       
$this->items[$k] = new AttributePreprocessor($regexp);

        return
$this->items[$k];
    }

   
/**
    * @return string Name of the attribute the attribute processor uses as source
    */
   
public function key()
    {
        list(
$attrName) = unserialize(key($this->items));

        return
$attrName;
    }

   
/**
    * Merge a set of attribute preprocessors into this collection
    *
    * @param array|AttributePreprocessorCollection $attributePreprocessors Instance of AttributePreprocessorCollection or 2D array of [[attrName,regexp|AttributePreprocessor]]
    */
   
public function merge($attributePreprocessors)
    {
       
$error = false;

        if (
$attributePreprocessors instanceof AttributePreprocessorCollection)
        {
            foreach (
$attributePreprocessors as $attrName => $attributePreprocessor)
            {
               
$this->add($attrName, $attributePreprocessor->getRegexp());
            }
        }
        elseif (
is_array($attributePreprocessors))
        {
           
// This should be a list where each element is a [attrName,regexp] pair, or
            // [attrName,AttributePreprocessor]
           
foreach ($attributePreprocessors as $values)
            {
                if (!
is_array($values))
                {
                   
$error = true;
                    break;
                }

                list(
$attrName, $value) = $values;

                if (
$value instanceof AttributePreprocessor)
                {
                   
$value = $value->getRegexp();
                }

               
$this->add($attrName, $value);
            }
        }
        else
        {
           
$error = true;
        }

        if (
$error)
        {
            throw new
InvalidArgumentException('merge() expects an instance of AttributePreprocessorCollection or a 2D array where each element is a [attribute name, regexp] pair');
        }
    }

   
/**
    * {@inheritdoc}
    */
   
public function asConfig()
    {
       
$config = [];

        foreach (
$this->items as $k => $ap)
        {
            list(
$attrName) = unserialize($k);
           
$config[] = [$attrName, $ap, $ap->getCaptureNames()];
        }

        return
$config;
    }
}