<commit_before><?php

require 'qevix.php';

class QevixTests extends \PHPUnit_Framework_TestCase
{
    private static $qevix = null;

    public static function setUpBeforeClass()
    {
        $qevix = new Qevix();

        // 1. Задает список разрешенных тегов
        $qevix->cfgAllowTags(array('b', 'i', 'u', 'a', 'img', 'ul', 'li', 'ol', 'br', 'code', 'pre', 'div', 'cut', 'video'));

        // 2. Указавает, какие теги считать короткими (<br>, <img>)
        $qevix->cfgSetTagShort(array('br','img','cut', 'video'));

        // 3. Указывает преформатированные теги, в которых нужно всё заменять на HTML сущности
        $qevix->cfgSetTagPreformatted(array('code'));

        // 4. Указывает не короткие теги, которые могут быть пустыми и их не нужно из-за этого удалять
        $qevix->cfgSetTagIsEmpty(array('div'));

        // 5. Указывает теги внутри которых не нужна авто расстановка тегов перевода на новую строку
        $qevix->cfgSetTagNoAutoBr(array('ul', 'ol'));

        // 6. Указывает теги, которые необходимо вырезать вместе с содержимым
        $qevix->cfgSetTagCutWithContent(array('script', 'object', 'iframe', 'style'));

        // 7. Указывает теги, после которых не нужно добавлять дополнительный перевод строки, например, блочные теги
        $qevix->cfgSetTagBlockType(array('ol','ul','code','video'));

        // 8. Добавляет разрешенные параметры для тегов, значение по умолчанию шаблон #text. Разрешенные шаблоны #text, #int, #link, #regexp(...) (Например: "#regexp(\d+(%|px))")
        $qevix->cfgAllowTagParams('a', array('title', 'href' => '#link', 'rel' => '#text', 'target' => array('_blank')));
        $qevix->cfgAllowTagParams('img', array('src' => '#text', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int'));
        $qevix->cfgAllowTagParams('video', array('src' => ['#link' => ['youtube.com','vimeo.com']]));


        // 9. Добавляет обязательные параметры для тега
        $qevix->cfgSetTagParamsRequired('a', 'href');
        $qevix->cfgSetTagParamsRequired('img', 'src');
        $qevix->cfgSetTagParamsRequired('video', 'src');

        // 10. Указывает, какие теги являются контейнерами для других тегов
        $qevix->cfgSetTagChilds('ul', 'li', true, true);
        $qevix->cfgSetTagChilds('ol', 'li', true, true);

        // 11. Указывает, какие теги не должны быть дочерними к другим тегам
        $qevix->cfgSetTagGlobal('cut');

        // 12. Устанавливаем атрибуты тегов, которые будут добавлятся автоматически
        $qevix->cfgSetTagParamDefault('a', 'rel', 'nofollow', true);
        $qevix->cfgSetTagParamDefault('img', 'alt', '');

        // 13. Указывает теги, в которых нужно отключить типографирование текста
        $qevix->cfgSetTagNoTypography(array('code', 'pre'));

        // 14. Устанавливает список разрешенных протоколов для ссылок (https, http, ftp)
        $qevix->cfgSetLinkProtocolAllow(array('http','https'));

        // 15. Включает или выключает режим XHTML
        $qevix->cfgSetXHTMLMode(false);

        // 16. Включает или выключает режим автозамены символов переводов строк на тег <br>
        $qevix->cfgSetAutoBrMode(true);

        // 17. Включает или выключает режим автоматического определения ссылок
        $qevix->cfgSetAutoLinkMode(true);

        // 18. Задает символ/символы перевода строки. По умполчанию "\n". Разрешено "\n" или "\r\n"
        $qevix->cfgSetEOL("\n");

        // 19. Устанавливает на тег callback-функцию
        $qevix->cfgSetTagBuildCallback('code', [static::class, 'tagCodeBuild']);

        // 20. Устанавливает на строку предварённую спецсимволом (@|#|$) callback-функцию
        $qevix->cfgSetSpecialCharCallback('#', [static::class, 'tagSharpBuild']);
        $qevix->cfgSetSpecialCharCallback('@', [static::class, 'tagAtBuild']);

        static::$qevix = $qevix;
    }

    public static function tearDownAfterClass()
    {
        static::$qevix = null;
    }

    public static function tagCodeBuild($tag, $params, $content)
    {
        return '<pre><code>'.$content.'<code><pre>'."\n";
    }

    public static function tagSharpBuild($string)
    {
        if (!preg_match('#^[\w\_\-\ ]{1,32}$#isu', $string)) {
            return false;
        }

        return '<a href="/search/tag/'.rawurlencode($string).'/">#'.$string.'</a>';
    }

    public static function tagAtBuild($string)
    {
        if (!preg_match('#^[\w\_\-]{1,32}$#isu', $string)) {<commit_msg>Fix Test for PHP5.4<commit_after><?php

require 'qevix.php';

class QevixTests extends \PHPUnit_Framework_TestCase
{
    private static $qevix = null;

    public static function setUpBeforeClass()
    {
        $qevix = new Qevix();

        // 1. Задает список разрешенных тегов
        $qevix->cfgAllowTags(array('b', 'i', 'u', 'a', 'img', 'ul', 'li', 'ol', 'br', 'code', 'pre', 'div', 'cut', 'video'));

        // 2. Указавает, какие теги считать короткими (<br>, <img>)
        $qevix->cfgSetTagShort(array('br','img','cut', 'video'));

        // 3. Указывает преформатированные теги, в которых нужно всё заменять на HTML сущности
        $qevix->cfgSetTagPreformatted(array('code'));

        // 4. Указывает не короткие теги, которые могут быть пустыми и их не нужно из-за этого удалять
        $qevix->cfgSetTagIsEmpty(array('div'));

        // 5. Указывает теги внутри которых не нужна авто расстановка тегов перевода на новую строку
        $qevix->cfgSetTagNoAutoBr(array('ul', 'ol'));

        // 6. Указывает теги, которые необходимо вырезать вместе с содержимым
        $qevix->cfgSetTagCutWithContent(array('script', 'object', 'iframe', 'style'));

        // 7. Указывает теги, после которых не нужно добавлять дополнительный перевод строки, например, блочные теги
        $qevix->cfgSetTagBlockType(array('ol','ul','code','video'));

        // 8. Добавляет разрешенные параметры для тегов, значение по умолчанию шаблон #text. Разрешенные шаблоны #text, #int, #link, #regexp(...) (Например: "#regexp(\d+(%|px))")
        $qevix->cfgAllowTagParams('a', array('title', 'href' => '#link', 'rel' => '#text', 'target' => array('_blank')));
        $qevix->cfgAllowTagParams('img', array('src' => '#text', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int'));
        $qevix->cfgAllowTagParams('video', array('src' => ['#link' => ['youtube.com','vimeo.com']]));


        // 9. Добавляет обязательные параметры для тега
        $qevix->cfgSetTagParamsRequired('a', 'href');
        $qevix->cfgSetTagParamsRequired('img', 'src');
        $qevix->cfgSetTagParamsRequired('video', 'src');

        // 10. Указывает, какие теги являются контейнерами для других тегов
        $qevix->cfgSetTagChilds('ul', 'li', true, true);
        $qevix->cfgSetTagChilds('ol', 'li', true, true);

        // 11. Указывает, какие теги не должны быть дочерними к другим тегам
        $qevix->cfgSetTagGlobal('cut');

        // 12. Устанавливаем атрибуты тегов, которые будут добавлятся автоматически
        $qevix->cfgSetTagParamDefault('a', 'rel', 'nofollow', true);
        $qevix->cfgSetTagParamDefault('img', 'alt', '');

        // 13. Указывает теги, в которых нужно отключить типографирование текста
        $qevix->cfgSetTagNoTypography(array('code', 'pre'));

        // 14. Устанавливает список разрешенных протоколов для ссылок (https, http, ftp)
        $qevix->cfgSetLinkProtocolAllow(array('http','https'));

        // 15. Включает или выключает режим XHTML
        $qevix->cfgSetXHTMLMode(false);

        // 16. Включает или выключает режим автозамены символов переводов строк на тег <br>
        $qevix->cfgSetAutoBrMode(true);

        // 17. Включает или выключает режим автоматического определения ссылок
        $qevix->cfgSetAutoLinkMode(true);

        // 18. Задает символ/символы перевода строки. По умполчанию "\n". Разрешено "\n" или "\r\n"
        $qevix->cfgSetEOL("\n");

        // 19. Устанавливает на тег callback-функцию
        $qevix->cfgSetTagBuildCallback('code', [__CLASS__, 'tagCodeBuild']);

        // 20. Устанавливает на строку предварённую спецсимволом (@|#|$) callback-функцию
        $qevix->cfgSetSpecialCharCallback('#', [__CLASS__, 'tagSharpBuild']);
        $qevix->cfgSetSpecialCharCallback('@', [__CLASS__, 'tagAtBuild']);

        static::$qevix = $qevix;
    }

    public static function tearDownAfterClass()
    {
        static::$qevix = null;
    }

    public static function tagCodeBuild($tag, $params, $content)
    {
        return '<pre><code>'.$content.'<code><pre>'."\n";
    }

    public static function tagSharpBuild($string)
    {
        if (!preg_match('#^[\w\_\-\ ]{1,32}$#isu', $string)) {
            return false;
        }

        return '<a href="/search/tag/'.rawurlencode($string).'/">#'.$string.'</a>';
    }

    public static function tagAtBuild($string)
    {
        if (!preg_match('#^[\w\_\-]{1,32}$#isu', $string)) {
{'fraction_non_alphanumeric': 0.16883262379565314, 'fraction_numerical': 0.00851445216222272, 'mean_word_length': 3.1969910672308415, 'pattern_counts': {'":': 0, '<': 23, '<?xml version=': 0, '>': 95, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5839866', 'n_tokens_mistral': 3302, 'n_tokens_neox': 3469, 'n_words': 687}