77 строки
1.6 KiB
PHP
77 строки
1.6 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* PHP TableOfContents Library
|
|
*
|
|
* @license http://opensource.org/licenses/MIT
|
|
* @link https://github.com/igorvbelousov/toc
|
|
* @version 1.0
|
|
* @package igorvbelousov/toc
|
|
* @author Casey McLaughlin <caseyamcl@gmail.com>
|
|
* @author Igor V Belousov <igor@belousovv.ru>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*
|
|
* ------------------------------------------------------------------
|
|
*/
|
|
namespace TOC;
|
|
|
|
use Cocur\Slugify\Slugify;
|
|
|
|
/**
|
|
* UniqueSluggifier creates slugs from text without repeating the same slug twice per instance
|
|
*
|
|
* @author Casey McLaughlin <caseyamcl@gmail.com>
|
|
*/
|
|
class UniqueSluggifier
|
|
{
|
|
/**
|
|
* @var \Cocur\Slugify\Slugify
|
|
*/
|
|
private $slugify;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $used;
|
|
|
|
// ---------------------------------------------------------------
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param \Cocur\Slugify\Slugify $slugify
|
|
*/
|
|
public function __construct(Slugify $slugify = null)
|
|
{
|
|
$this->used = array();
|
|
$this->slugify = $slugify ?: new Slugify();
|
|
}
|
|
|
|
// ---------------------------------------------------------------
|
|
|
|
/**
|
|
* Slugify
|
|
*
|
|
* @param string $text
|
|
* @return string
|
|
*/
|
|
public function slugify($text)
|
|
{
|
|
$slugged = $this->slugify->slugify($text);
|
|
|
|
$count = 1;
|
|
$orig = $slugged;
|
|
while (in_array($slugged, $this->used)) {
|
|
$slugged = $orig . '-' . $count;
|
|
$count++;
|
|
}
|
|
|
|
$this->used[] = $slugged;
|
|
return $slugged;
|
|
}
|
|
}
|
|
|
|
/* EOF: UniqueSluggifier.php */
|