Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Plugins/BBCodes/Configurator/BBCode.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\Plugins\BBCodes\Configurator;

use
InvalidArgumentException;
use
s9e\TextFormatter\Configurator\Collections\AttributeList;
use
s9e\TextFormatter\Configurator\ConfigProvider;
use
s9e\TextFormatter\Configurator\Helpers\ConfigHelper;
use
s9e\TextFormatter\Configurator\JavaScript\Dictionary;
use
s9e\TextFormatter\Configurator\Traits\Configurable;
use
s9e\TextFormatter\Configurator\Validators\AttributeName;
use
s9e\TextFormatter\Configurator\Validators\TagName;

/**
* @property AttributeList $contentAttributes List of attributes whose value is to be made the content between the BBCode's tags if it's not explicitly given
* @property string $defaultAttribute Name of the default attribute
* @property bool $forceLookahead Whether the parser should look ahead in the text for an end tag before adding a start tag
* @property string $tagName Name of the tag used to represent this BBCode in the intermediate representation
*/
class BBCode implements ConfigProvider
{
    use
Configurable;

   
/**
    * @var AttributeList List of attributes whose value is to be made the content between the
    *                    BBCode's tags if it's not explicitly given
    */
   
protected $contentAttributes;

   
/**
    * @var string Name of the default attribute
    */
   
protected $defaultAttribute;

   
/**
    * @var bool Whether the parser should look ahead in the text for an end tag before adding a
    *           start tag
    */
   
protected $forceLookahead = false;

   
/**
    * @var string Name of the tag used to represent this BBCode in the intermediate representation
    */
   
protected $tagName;

   
/**
    * @param array $options This BBCode's options
    */
   
public function __construct(array $options = null)
    {
       
$this->contentAttributes = new AttributeList;
        if (isset(
$options))
        {
            foreach (
$options as $optionName => $optionValue)
            {
               
$this->__set($optionName, $optionValue);
            }
        }
    }

   
/**
    * {@inheritdoc}
    */
   
public function asConfig()
    {
       
$config = ConfigHelper::toArray(get_object_vars($this));
        if (!
$this->forceLookahead)
        {
            unset(
$config['forceLookahead']);
        }

        return
$config;
    }

   
/**
    * Normalize the name of a BBCode
    *
    * Follows the same rules as tag names with one exception: "*" is kept for compatibility with
    * other BBCode engines
    *
    * @param  string $bbcodeName Original name
    * @return string             Normalized name
    */
   
public static function normalizeName($bbcodeName)
    {
        if (
$bbcodeName === '*')
        {
            return
'*';
        }

        if (
strpos($bbcodeName, ':') !== false || !TagName::isValid($bbcodeName))
        {
            throw new
InvalidArgumentException("Invalid BBCode name '" . $bbcodeName . "'");
        }

        return
TagName::normalize($bbcodeName);
    }

   
/**
    * Set the default attribute name for this BBCode
    *
    * @param string $attrName
    */
   
public function setDefaultAttribute($attrName)
    {
       
$this->defaultAttribute = AttributeName::normalize($attrName);
    }

   
/**
    * Set the tag name that represents this BBCode in the intermediate representation
    *
    * @param string $tagName
    */
   
public function setTagName($tagName)
    {
       
$this->tagName = TagName::normalize($tagName);
    }
}