.=< { Star Gans Tq } >=.

  • Home

  • Killme
  • Download
  • Current Path : /home/m/e/h/meharicl/www/phpBB3/vendor/s9e/text-formatter/src/Plugins/
    Upload File
    @Command ~ $  
    Current File : /home/m/e/h/meharicl/www/phpBB3/vendor/s9e/text-formatter/src/Plugins/ConfiguratorBase.php

    <?php
    
    /**
    * @package   s9e\TextFormatter
    * @copyright Copyright (c) 2010-2020 The s9e authors
    * @license   http://www.opensource.org/licenses/mit-license.php The MIT License
    */
    namespace s9e\TextFormatter\Plugins;
    
    use InvalidArgumentException;
    use RuntimeException;
    use s9e\TextFormatter\Configurator;
    use s9e\TextFormatter\Configurator\ConfigProvider;
    use s9e\TextFormatter\Configurator\Helpers\ConfigHelper;
    use s9e\TextFormatter\Configurator\JavaScript\Code;
    use s9e\TextFormatter\Configurator\Validators\AttributeName;
    use s9e\TextFormatter\Configurator\Validators\TagName;
    
    abstract class ConfiguratorBase implements ConfigProvider
    {
    	/**
    	* @var Configurator
    	*/
    	protected $configurator;
    
    	/**
    	* @var mixed Ignored if FALSE. Otherwise, this plugin's parser will only be executed if this
    	*            string is present in the original text
    	*/
    	protected $quickMatch = false;
    
    	/**
    	* @var integer Maximum amount of matches to process - used by the parser when running the global
    	*              regexp
    	*/
    	protected $regexpLimit = 50000;
    
    	/**
    	* @param Configurator $configurator
    	* @param array        $overrideProps Properties of the plugin will be overwritten with those
    	*/
    	final public function __construct(Configurator $configurator, array $overrideProps = [])
    	{
    		$this->configurator = $configurator;
    
    		foreach ($overrideProps as $k => $v)
    		{
    			$methodName = 'set' . ucfirst($k);
    
    			if (method_exists($this, $methodName))
    			{
    				$this->$methodName($v);
    			}
    			elseif (property_exists($this, $k))
    			{
    				$this->$k = $v;
    			}
    			else
    			{
    				throw new RuntimeException("Unknown property '" . $k . "'");
    			}
    		}
    
    		$this->setUp();
    	}
    
    	/**
    	* Executed by this plugin's constructor
    	*/
    	protected function setUp()
    	{
    	}
    
    	/**
    	* Finalize this plugin's configuration
    	*
    	* Executed by the configurator whenever the tags' config must be in a usable state:
    	*  - before the parser's config is generated
    	*  - before the renderer's stylesheet is generated
    	*  - before HTML5 rules are generated
    	*
    	* As such, this method may be called multiple times during configuration
    	*/
    	public function finalize()
    	{
    	}
    
    	/**
    	* @return array|null This plugin's config, or NULL to disable this plugin
    	*/
    	public function asConfig()
    	{
    		$properties = get_object_vars($this);
    		unset($properties['configurator']);
    
    		return ConfigHelper::toArray($properties);
    	}
    
    	/**
    	* Return a list of base properties meant to be added to asConfig()'s return
    	*
    	* NOTE: this final method exists so that the plugin's configuration can always specify those
    	*       base properties, even if they're omitted from asConfig(). Going forward, this ensure
    	*       that new base properties added to ConfiguratorBase appear in the plugin's config without
    	*       having to update every plugin
    	*
    	* @return array
    	*/
    	final public function getBaseProperties()
    	{
    		$config = [
    			'className'   => preg_replace('/Configurator$/', 'Parser', get_class($this)),
    			'quickMatch'  => $this->quickMatch,
    			'regexpLimit' => $this->regexpLimit
    		];
    
    		$js = $this->getJSParser();
    		if (isset($js))
    		{
    			$config['js'] = new Code($js);
    		}
    
    		return $config;
    	}
    
    	/**
    	* Return additional hints used in the JavaScript parser
    	*
    	* @return array Hint names and values
    	*/
    	public function getJSHints()
    	{
    		return [];
    	}
    
    	/**
    	* Return this plugin's JavaScript parser
    	*
    	* This is the base implementation, meant to be overridden by custom plugins. By default it
    	* returns the Parser.js file from stock plugins' directory, if available
    	*
    	* @return string|null JavaScript source, or NULL if no JS parser is available
    	*/
    	public function getJSParser()
    	{
    		$className = get_class($this);
    		if (strpos($className, 's9e\\TextFormatter\\Plugins\\') === 0)
    		{
    			$p = explode('\\', $className);
    			$pluginName = $p[3];
    
    			$filepath = __DIR__ . '/' . $pluginName . '/Parser.js';
    			if (file_exists($filepath))
    			{
    				return file_get_contents($filepath);
    			}
    		}
    
    		return null;
    	}
    
    	/**
    	* Return the tag associated with this plugin, if applicable
    	*
    	* @return \s9e\TextFormatter\Configurator\Items\Tag
    	*/
    	public function getTag()
    	{
    		if (!isset($this->tagName))
    		{
    			throw new RuntimeException('No tag associated with this plugin');
    		}
    
    		return $this->configurator->tags[$this->tagName];
    	}
    
    	//==========================================================================
    	// Setters
    	//==========================================================================
    
    	/**
    	* Disable quickMatch
    	*
    	* @return void
    	*/
    	public function disableQuickMatch()
    	{
    		$this->quickMatch = false;
    	}
    
    	/**
    	* Set $this->attrName with given attribute name, normalized
    	*
    	* @param  string $attrName New attribute name
    	* @return void
    	*/
    	protected function setAttrName($attrName)
    	{
    		if (!property_exists($this, 'attrName'))
    		{
    			throw new RuntimeException("Unknown property 'attrName'");
    		}
    
    		$this->attrName = AttributeName::normalize($attrName);
    	}
    
    	/**
    	* Set the quickMatch string
    	*
    	* @param  string $quickMatch
    	* @return void
    	*/
    	public function setQuickMatch($quickMatch)
    	{
    		if (!is_string($quickMatch))
    		{
    			throw new InvalidArgumentException('quickMatch must be a string');
    		}
    
    		$this->quickMatch = $quickMatch;
    	}
    
    	/**
    	* Set the maximum number of regexp matches
    	*
    	* @param  integer $limit
    	* @return void
    	*/
    	public function setRegexpLimit($limit)
    	{
    		$limit = (int) $limit;
    
    		if ($limit < 1)
    		{
    			throw new InvalidArgumentException('regexpLimit must be a number greater than 0');
    		}
    
    		$this->regexpLimit = $limit;
    	}
    
    	/**
    	* Set $this->tagName with given tag name, normalized
    	*
    	* @param  string $tagName New tag name
    	* @return void
    	*/
    	protected function setTagName($tagName)
    	{
    		if (!property_exists($this, 'tagName'))
    		{
    			throw new RuntimeException("Unknown property 'tagName'");
    		}
    
    		$this->tagName = TagName::normalize($tagName);
    	}
    }