first
This commit is contained in:
199
wp-content/plugins/visual-portfolio/vendors/slugify/Slugify.php
vendored
Normal file
199
wp-content/plugins/visual-portfolio/vendors/slugify/Slugify.php
vendored
Normal file
@@ -0,0 +1,199 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of cocur/slugify.
|
||||
*
|
||||
* (c) Florian Eckerstorfer <florian@eckerstorfer.co>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*
|
||||
* CHANGED by nK:
|
||||
* - added check for `mb_strtolower` existence and use `strtolower` if mb is not available
|
||||
*/
|
||||
|
||||
namespace Cocur\Slugify;
|
||||
|
||||
use Cocur\Slugify\RuleProvider\DefaultRuleProvider;
|
||||
use Cocur\Slugify\RuleProvider\RuleProviderInterface;
|
||||
|
||||
/**
|
||||
* Slugify
|
||||
*
|
||||
* @package Cocur\Slugify
|
||||
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
|
||||
* @author Ivo Bathke <ivo.bathke@gmail.com>
|
||||
* @author Marchenko Alexandr
|
||||
* @copyright 2012-2015 Florian Eckerstorfer
|
||||
* @license http://www.opensource.org/licenses/MIT The MIT License
|
||||
*/
|
||||
class Slugify implements SlugifyInterface
|
||||
{
|
||||
const LOWERCASE_NUMBERS_DASHES = '/[^A-Za-z0-9]+/';
|
||||
|
||||
/**
|
||||
* @var array<string,string>
|
||||
*/
|
||||
protected $rules = [];
|
||||
|
||||
/**
|
||||
* @var RuleProviderInterface
|
||||
*/
|
||||
protected $provider;
|
||||
|
||||
/**
|
||||
* @var array<string,mixed>
|
||||
*/
|
||||
protected $options = [
|
||||
'regexp' => self::LOWERCASE_NUMBERS_DASHES,
|
||||
'separator' => '-',
|
||||
'lowercase' => true,
|
||||
'lowercase_after_regexp' => false,
|
||||
'trim' => true,
|
||||
'strip_tags' => false,
|
||||
'rulesets' => [
|
||||
'default',
|
||||
// Languages are preferred if they appear later, list is ordered by number of
|
||||
// websites in that language
|
||||
// https://en.wikipedia.org/wiki/Languages_used_on_the_Internet#Content_languages_for_websites
|
||||
'armenian',
|
||||
'azerbaijani',
|
||||
'burmese',
|
||||
'hindi',
|
||||
'georgian',
|
||||
'norwegian',
|
||||
'vietnamese',
|
||||
'ukrainian',
|
||||
'latvian',
|
||||
'finnish',
|
||||
'greek',
|
||||
'czech',
|
||||
'arabic',
|
||||
'slovak',
|
||||
'turkish',
|
||||
'polish',
|
||||
'german',
|
||||
'russian',
|
||||
'romanian'
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* @param array $options
|
||||
* @param RuleProviderInterface $provider
|
||||
*/
|
||||
public function __construct(array $options = [], RuleProviderInterface $provider = null)
|
||||
{
|
||||
$this->options = array_merge($this->options, $options);
|
||||
$this->provider = $provider ? $provider : new DefaultRuleProvider();
|
||||
|
||||
foreach ($this->options['rulesets'] as $ruleSet) {
|
||||
$this->activateRuleSet($ruleSet);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the slug-version of the string.
|
||||
*
|
||||
* @param string $string String to slugify
|
||||
* @param string|array|null $options Options
|
||||
*
|
||||
* @return string Slugified version of the string
|
||||
*/
|
||||
public function slugify($string, $options = null)
|
||||
{
|
||||
// BC: the second argument used to be the separator
|
||||
if (is_string($options)) {
|
||||
$separator = $options;
|
||||
$options = [];
|
||||
$options['separator'] = $separator;
|
||||
}
|
||||
|
||||
$options = array_merge($this->options, (array) $options);
|
||||
|
||||
// Add a custom ruleset without touching the default rules
|
||||
if (isset($options['ruleset'])) {
|
||||
$rules = array_merge($this->rules, $this->provider->getRules($options['ruleset']));
|
||||
} else {
|
||||
$rules = $this->rules;
|
||||
}
|
||||
|
||||
$string = ($options['strip_tags'])
|
||||
? strip_tags($string)
|
||||
: $string;
|
||||
|
||||
$string = strtr($string, $rules);
|
||||
unset($rules);
|
||||
|
||||
if ($options['lowercase'] && !$options['lowercase_after_regexp']) {
|
||||
// CHANGED: nK
|
||||
// added check for mb_strtolower existence.
|
||||
$string = function_exists('mb_strtolower') ? mb_strtolower($string) : strtolower($string);
|
||||
}
|
||||
|
||||
$string = preg_replace($options['regexp'], $options['separator'], $string);
|
||||
|
||||
if ($options['lowercase'] && $options['lowercase_after_regexp']) {
|
||||
// CHANGED: nK
|
||||
// added check for mb_strtolower existence.
|
||||
$string = function_exists('mb_strtolower') ? mb_strtolower($string) : strtolower($string);
|
||||
}
|
||||
|
||||
return ($options['trim'])
|
||||
? trim($string, $options['separator'])
|
||||
: $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a custom rule to Slugify.
|
||||
*
|
||||
* @param string $character Character
|
||||
* @param string $replacement Replacement character
|
||||
*
|
||||
* @return Slugify
|
||||
*/
|
||||
public function addRule($character, $replacement)
|
||||
{
|
||||
$this->rules[$character] = $replacement;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds multiple rules to Slugify.
|
||||
*
|
||||
* @param array <string,string> $rules
|
||||
*
|
||||
* @return Slugify
|
||||
*/
|
||||
public function addRules(array $rules)
|
||||
{
|
||||
foreach ($rules as $character => $replacement) {
|
||||
$this->addRule($character, $replacement);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $ruleSet
|
||||
*
|
||||
* @return Slugify
|
||||
*/
|
||||
public function activateRuleSet($ruleSet)
|
||||
{
|
||||
return $this->addRules($this->provider->getRules($ruleSet));
|
||||
}
|
||||
|
||||
/**
|
||||
* Static method to create new instance of {@see Slugify}.
|
||||
*
|
||||
* @param array <string,mixed> $options
|
||||
*
|
||||
* @return Slugify
|
||||
*/
|
||||
public static function create(array $options = [])
|
||||
{
|
||||
return new static($options);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user