Exemplo n.º 1
0
function bg_bibfers_search_result($context, $type, $lang, $prll = '')
{
    global $bg_bibfers_option;
    global $bg_bibfers_chapter, $bg_bibfers_ch;
    global $bg_bibfers_url, $bg_bibfers_bookTitle, $bg_bibfers_shortTitle, $bg_bibfers_bookFile;
    $lang = include_books($lang);
    bg_bibfers_get_options();
    $verses = "";
    $bkr = "";
    /*******************************************************************************
       Построение паттерна
    
    *******************************************************************************/
    //	echo "context=". $context. "<br>";					// Отладка
    $pattern = trim($context);
    // убираем пробелы по краям
    $pattern = preg_replace("/\\s+/ui", ' ', $pattern);
    // удаляем двойные пробелы
    $pattern = preg_replace("/\\\\/ui", '\\', $pattern);
    // переобразуем спецсимвол в обычный \
    $pattern = preg_replace("/\\//ui", '\\/', $pattern);
    // переобразуем спецсимвол в обычный /
    $pattern = preg_replace("/\\^/ui", '\\^', $pattern);
    // переобразуем спецсимвол в обычный ^
    $pattern = preg_replace("/\\?/ui", '\\?', $pattern);
    // переобразуем спецсимвол в обычный ?
    $pattern = preg_replace("/\\./ui", '\\.', $pattern);
    // переобразуем спецсимвол в обычный .
    $pattern = preg_replace("/\\+/ui", '\\+', $pattern);
    // переобразуем спецсимвол в обычный +
    $pattern = preg_replace("/\\{/ui", '\\{', $pattern);
    // переобразуем спецсимвол в обычный {
    $pattern = preg_replace("/\\}/ui", '\\}', $pattern);
    // переобразуем спецсимвол в обычный }
    $pattern = preg_replace("/\\(/ui", '\\(', $pattern);
    // переобразуем спецсимвол в обычный (
    $pattern = preg_replace("/\\)/ui", '\\)', $pattern);
    // переобразуем спецсимвол в обычный )
    $pattern = preg_replace("/\\[/ui", '\\[', $pattern);
    // переобразуем спецсимвол в обычный [
    $pattern = preg_replace("/\\]/ui", '\\]', $pattern);
    // переобразуем спецсимвол в обычный ]
    $pattern = preg_replace("/\\\$/ui", '\\w', $pattern);
    // $ - строго 1 любая буква
    $pattern = preg_replace("/\\%/ui", '\\w?', $pattern);
    // % - 0 или 1 любая буква
    $pattern = preg_replace("/\\*/ui", '\\w*', $pattern);
    // * - 0 или несколько любых букв
    $pattern = preg_replace("/\\s/ui", '\\s*', $pattern);
    // пробельные символы в тексте Библии могут быть любыми
    $pattern = "/\\b" . $pattern . "\\b/ui";
    // Только целое слово
    //	echo "pattern=". $pattern. "<br>";					// Отладка
    /*******************************************************************************
       Организуем просмотр всех книг Библии
    
    *******************************************************************************/
    foreach ($bg_bibfers_bookFile as $book => $book_file) {
        $book_file = 'bible/' . $book_file;
        // Имя файла книги
        /*******************************************************************************
           Чтение и преобразование файла книги
           
        *******************************************************************************/
        // Получаем данные из файла
        $code = false;
        if ($bg_bibfers_option['fgc'] == 'on' && function_exists('file_get_contents')) {
            // Попытка1. Если данные не получены попробуем применить file_get_contents()
            $url = dirname(dirname(__FILE__)) . '/' . $book_file;
            // Локальный URL файла
            $code = file_get_contents($url);
        }
        if ($bg_bibfers_option['fopen'] == 'on' && !$code) {
            // Попытка 2. Если данные опять не получены попробуем применить fopen()
            $url = dirname(dirname(__FILE__)) . '/' . $book_file;
            // Локальный URL файла
            $ch = fopen($url, "r");
            // Открываем файл для чтения
            if ($ch) {
                while (!feof($ch)) {
                    $code .= fread($ch, 2097152);
                    // загрузка текста (не более 2097152 байт)
                }
                fclose($ch);
                // Закрываем файл
            }
        }
        if ($bg_bibfers_option['curl'] == 'on' && function_exists('curl_init') && !$code) {
            // Попытка3. Если установлен cURL
            $url = plugins_url($book_file, dirname(__FILE__));
            // URL файла
            $ch = curl_init($url);
            // создание нового ресурса cURL
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            // возврат результата передачи в качестве строки из curl_exec() вместо прямого вывода в браузер
            $code = curl_exec($ch);
            // загрузка текста
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            if ($httpCode != '200') {
                $code = false;
            }
            // Проверка на код http 200
            curl_close($ch);
            // завершение сеанса и освобождение ресурсов
        }
        if (!$code) {
            return "";
        }
        // Увы. Паранойя хостера достигла апогея. Файл не прочитан или ошибка
        // Преобразовать json в массив
        $json = json_decode($code, true);
        /*******************************************************************************
           Поиск вхождения в текст стиха Библии
           и формирование результатов поиска
        *******************************************************************************/
        $cn_json = count($json);
        $chr = 0;
        for ($i = 0; $i < $cn_json; $i++) {
            if (!preg_match($pattern, $json[$i]['text'])) {
                continue;
            }
            // Если нет вхождений ищем в следующем стихе
            if ($bkr != $book) {
                if ($type == "book") {
                    $verses = $verses . "<h3>" . bg_bibfers_getTitle($book) . "</h3>";
                } else {
                    if ($type == "t_verses") {
                        $verses = $verses . "<strong>" . bg_bibfers_getTitle($book) . "</strong><br>";
                    }
                }
                $bkr = $book;
            }
            $ch = (int) $json[$i]['part'];
            $vr = (int) $json[$i]['stix'];
            $verses = $verses . bg_bibfers_printVerses($json, $book, $chr, $ch, $ch, $vr, $vr, $type, $lang, $prll);
            $chr = $ch;
        }
    }
    $verses = preg_replace($pattern, '<strong class="search-excerpt">\\0</strong>', $verses);
    if (!$verses) {
        $verses = '<p>&laquo;<strong class="search-excerpt">' . $context . '</strong>&raquo; &mdash; ' . __('sorry, but nothing matched your search terms. Please try again with some different keywords.', 'bg_bibfers') . '</p>';
    }
    return $verses;
}
Exemplo n.º 2
0
function bg_bibfers_bible_proc($txt, $type = '', $lang = '', $prll = '')
{
    global $post;
    global $bg_bibfers_option;
    global $bg_bibfers_all_refs;
    global $bg_bibfers_chapter, $bg_bibfers_ch;
    global $bg_bibfers_url, $bg_bibfers_bookTitle, $bg_bibfers_shortTitle, $bg_bibfers_bookFile;
    bg_bibfers_get_options();
    /****************** ОТЛАДКА ****************************************/
    if ($bg_bibfers_option['debug']) {
        $debug_file = dirname(dirname(__FILE__)) . "/debug.log";
        if (file_exists($debug_file)) {
            $size = filesize($debug_file);
            $lasttime = filectime($debug_file);
            if ($lasttime + 30 * 60 < time() || $size > 2 * 1024 * 1024) {
                unlink($debug_file);
            }
        }
        $start_time = microtime(true) * 1000;
        $s_time = $start_time;
        error_log(date('d.m.Y h:i:s') . ": " . get_permalink() . "\n", 3, $debug_file);
    }
    /*******************************************************************/
    if (!$lang) {
        $lang = set_bible_lang();
    }
    $lang = include_books($lang);
    $norefs_posts_val = get_post_meta($post->ID, 'norefs', true);
    if ($norefs_posts_val || in_category('norefs') || has_tag('norefs')) {
        return $txt;
    }
    // Ищем все вхождения ссылок <a ...</a>, заголовков <h. ... </h.> и шорт-кодов [norefs]...[/norefs] и [bible]...[/bible]
    preg_match_all("/<a\\s.*?<\\/a>/sui", $txt, $hdr_a, PREG_OFFSET_CAPTURE);
    preg_match_all("/<h([1-6])(.*?)<\\/h\\1>/sui", $txt, $hdr_h, PREG_OFFSET_CAPTURE);
    preg_match_all("/\\[norefs.*?\\[\\/norefs\\]/sui", $txt, $hdr_norefs, PREG_OFFSET_CAPTURE);
    preg_match_all("/\\[bible.*?\\[\\/bible\\]/sui", $txt, $hdr_bible, PREG_OFFSET_CAPTURE);
    // Ищем все вхождения ссылок на Библию
    //	$template = "/[\\(\\[](см\\.?\\:?(\\s|&nbsp\\;)*)?(\\d?(\\s|&nbsp\\;)*[А-яA-z]{2,8})((\\.|\\s|&nbsp\\;)*)(\\d+((\\s|&nbsp\\;)*[\\:\\,\\-—–](\\s|&nbsp\\;)*\\d+)*)(\\s|&nbsp\\;)*[\\]\\)]/ui";
    //	$template = "/(\\s|&nbsp\\;)?\\(?\\[?((\\s|&nbsp\\;)*см\\.?\\:?(\\s|&nbsp\\;)*)?(\\d?(\\s|&nbsp\\;)*[А-яA-z]{2,8})((\\.|\\s|&nbsp\\;)*)(\\d+((\\s|&nbsp\\;)*[\\:\\,\\-—–](\\s|&nbsp\\;)*\\d+)*)(\\s|&nbsp\\;)*[\\]\\)\\.]?/ui";
    //	$template = "/(\\s|&nbsp\\;)?\\(?\\[?((\\s|&nbsp\\;)*см\\.?\\:?(\\s|&nbsp\\;)*)?(\\d?(\\s|&nbsp\\;)*[А-яA-z]{2,8})((\\.|\\s|&nbsp\\;)*)(\\d+((\\s|&nbsp\\;)*[\\:\\;\\,\\.\\-—–](\\s|&nbsp\\;)*\\d+)*)(\\s|&nbsp\\;)*[\\]\\)\\.]?/ui";
    //	$template = "/(\\s|&nbsp\\;)?\\(?\\[?((\\s|&nbsp\\;)*см\\.?\\:?(\\s|&nbsp\\;)*)?(\\d?(\\s|&nbsp\\;)*[А-яA-z]{2,8})((\\.|\\s|&nbsp\\;)*)(\\d+((\\s|&nbsp\\;)*[\\:\\,\\.\\-—–](\\s|&nbsp\\;)*\\d+)*)(\\s|&nbsp\\;)*[\\]\\)(\\;|\\.)]?/ui";
    //	$template = "/(\\s|&nbsp\\;)?\\(?\\[?((\\s|&nbsp\\;)*см\\.?\\:?(\\s|&nbsp\\;)*)?(\\d?(\\s|&nbsp\\;)*[А-яA-z]{2,8})((\\.|\\s|&nbsp\\;)*)(\\d+((\\s|&nbsp\\;)*[\\:\\,\\.\\-—–](\\s|&nbsp\\;)*\\d+)*)[(\\s|&nbsp\\;)\\]\\)(\\;|\\.)]?/ui";
    //	$template = "/(\\s|&nbsp\\;)?\\(?\\[?((\\s|&nbsp\\;)*см\\.?\\:?(\\s|&nbsp\\;)*)?([1-4]?(\\s|&nbsp\\;)*[А-яёіїєґўЁІЇЄҐЎA-z\']{2,8})((\\.|\\s|&nbsp\\;)*)(\\d+((\\s|&nbsp\\;)*[\\:\\,\\.\\-‐‑‒–——―](\\s|&nbsp\\;)*\\d+)*)[(\\s|&nbsp\\;)\\]\\)(\\;|\\.)]?/uxi";
    $sps = "(?:\\s|\\x{00A0}|\\x{00C2}|(?:&nbsp;))";
    $dashes = "(?:[\\x{2010}-\\x{2015}]|(&#820[8-9];)|(&#821[0-3];))";
    $template = "/(?<!\\w)((?:[1-4]|I{1,3}|IV)?" . $sps . "*['A-Za-zА-Яа-яёіїєґўЁІЇЄҐЎ]{2,8})" . $sps . "*\\.?" . $sps . "*((\\d+|[IVXLC]+)(" . $sps . "*([\\.;:,-]|" . $dashes . ")" . $sps . "*(\\d+|[IVXLC]+))*)(?!\\w)/u";
    preg_match_all($template, $txt, $matches, PREG_OFFSET_CAPTURE);
    $cnt = count($matches[0]);
    $text = "";
    $start = 0;
    $j = 0;
    /****************** ОТЛАДКА ****************************************/
    if ($bg_bibfers_option['debug']) {
        $this_time = microtime(true) * 1000;
        $time = $this_time - $start_time;
        error_log("  Начальная обработка: " . round($time, 2) . " мсек.\n", 3, $debug_file);
        $start_time = $this_time;
    }
    /*******************************************************************/
    for ($i = 0; $i < $cnt; $i++) {
        // Проверим по каждому паттерну.
        preg_match($template, $matches[0][$i][0], $mt);
        /****************** ОПЕРАТИВНАЯ ОТЛАДКА ****************************	
        		echo "<b>". $matches[0][$i][0]."</b> => ";
        		$mcnt = count ($mt);
        		for ($k=1; $k < $mcnt; $k++) {
        			echo " <sup>|".$k."|</sup> ".$mt[$k];
        		}	
        		echo "<br>";
        /*******************************************************************/
        $cn = count($mt);
        if ($cn > 0) {
            $title = preg_replace("/" . $sps . "/u", '', $mt[1]);
            // Убираем пробельные символы, включая пробел, табуляцию, переводы строки
            $chapter = preg_replace("/" . $sps . "/u", '', $mt[2]);
            // и другие юникодные пробельные символы, а также неразрывные пробелы &nbsp;
            $chapter = preg_replace("/" . $dashes . "/u", '-', $chapter);
            // Замена разных вариантов тире на обычный
            $chapter = preg_replace("/;/u", ',', $chapter);
            // Замена точки с запятой на запятую
            $chapter = preg_replace("/(?<=[IVXLC]),\\./u", ":", $chapter);
            // Римскими цифрами обозначаются только главы (после них должно идти ":", а не "," или ".")
            // Замена римских цифр на арабские
            preg_match("/(I{1,3}|IV)(?=" . $sps . "*['A-Za-zА-Яа-яёіїєґўЁІЇЄҐЎ]{2,8})/u", $title, $rome);
            if ($rome) {
                $title = preg_replace("/" . $rome[0] . "/u", rome_to_arab($rome[0]), $title, 1);
            }
            preg_match_all("/[IVXLC]+/u", $chapter, $rome, PREG_OFFSET_CAPTURE);
            $crome = count($rome[0]);
            for ($r = 0; $r < $crome; $r++) {
                $chapter = preg_replace("/" . $rome[0][$r][0] . "/u", rome_to_arab($rome[0][$r][0]), $chapter, 1);
            }
            preg_match("/[\\:\\,\\.\\-]/u", $chapter, $mtchs);
            if ($mtchs) {
                if (strcasecmp($mtchs[0], ',') == 0 || strcasecmp($mtchs[0], '.') == 0) {
                    $chapter = preg_replace("/\\,/u", ':', $chapter, 1);
                    // Первое число всегда номер главы. Если глава отделена запятой, заменяем ее на двоеточие.
                    $chapter = preg_replace("/\\./u", ':', $chapter, 1);
                    // Первое число всегда номер главы. Если глава отделена точкой, заменяем ее на двоеточие.
                }
            }
            $title = bg_bibfers_getBook($title);
            if (strcasecmp($title, "") != 0 && bg_bibfers_check_tag($hdr_a, $matches[0][$i][1]) && ($bg_bibfers_option['headers'] == 'on' || bg_bibfers_check_tag($hdr_h, $matches[0][$i][1])) && bg_bibfers_check_tag($hdr_norefs, $matches[0][$i][1]) && bg_bibfers_check_tag($hdr_bible, $matches[0][$i][1])) {
                $ref = $matches[0][$i][0];
                $ref = trim($ref, " \f\t\v\n\r��");
                $book = bg_bibfers_getBook($title);
                // Обозначение книги
                if ($type == '' || $type == 'link') {
                    $book = bg_bibfers_getshortTitle($book);
                    // Короткое наименование книги
                    if ($bg_bibfers_option['norm_refs']) {
                        // Преобразовать ссылку к нормализованному виду
                        $newmt = bg_bibfers_get_url($title, $chapter, $book . ' ' . $chapter, $lang);
                    } else {
                        $newmt = bg_bibfers_get_url($title, $chapter, $ref, $lang);
                    }
                    $listmt = bg_bibfers_get_url($title, $chapter, $book . ' ' . $chapter, $lang);
                    $double = false;
                    for ($k = 0; $k < $j; $k++) {
                        // Проверяем не совпадают ли ссылки?
                        if ($bg_bibfers_all_refs[$k] == $listmt) {
                            $double = true;
                            break;
                        }
                    }
                    if (!$double) {
                        // Дубликат не найден
                        $bg_bibfers_all_refs[$j] = $listmt;
                        $j++;
                    }
                } else {
                    $newmt = bg_bibfers_getQuotes($book, $chapter, $type, $lang, $prll);
                }
                $text = $text . substr($txt, $start, $matches[0][$i][1] - $start) . str_replace($ref, $newmt, $matches[0][$i][0]);
                $start = $matches[0][$i][1] + strlen($matches[0][$i][0]);
            }
        }
    }
    $txt = $text . substr($txt, $start);
    /****************** ОТЛАДКА ****************************************/
    if ($bg_bibfers_option['debug']) {
        error_log(" Всего патернов : " . $i . "\n", 3, $debug_file);
        $this_time = microtime(true) * 1000;
        $time = $this_time - $start_time;
        error_log("  * Обработка патернов: " . round($time, 2) . " мсек.\n", 3, $debug_file);
        $time = $this_time - $s_time;
        error_log(" Полное время : " . round($time, 2) . " мсек.\n\n", 3, $debug_file);
        $start_time = $this_time;
    }
    /*******************************************************************/
    return $txt;
}
Exemplo n.º 3
0
function bg_bibfers_getQuotes($book, $chapter, $type, $lang, $prll = '')
{
    global $bg_bibfers_option;
    global $bg_bibfers_chapter, $bg_bibfers_ch;
    global $bg_bibfers_url, $bg_bibfers_bookTitle, $bg_bibfers_shortTitle, $bg_bibfers_bookFile;
    $lang = include_books($lang);
    bg_bibfers_get_options();
    /*******************************************************************************
       Преобразование обозначения книги из формата azbyka.ru в формат patriarhia.ru
       чтение и преобразование файла книги
    *******************************************************************************/
    if (!$book) {
        return "";
    }
    if (!$bg_bibfers_bookFile[$book]) {
        return "";
    }
    $book_file = 'bible/' . $bg_bibfers_bookFile[$book];
    // Имя файла книги
    // Получаем данные из файла
    $code = false;
    if ($bg_bibfers_option['fgc'] == 'on' && function_exists('file_get_contents')) {
        // Попытка1. Если данные не получены попробуем применить file_get_contents()
        $url = dirname(dirname(__FILE__)) . '/' . $book_file;
        // Локальный URL файла
        $code = file_get_contents($url);
    }
    if ($bg_bibfers_option['fopen'] == 'on' && !$code) {
        // Попытка 2. Если данные опять не получены попробуем применить fopen()
        $url = dirname(dirname(__FILE__)) . '/' . $book_file;
        // Локальный URL файла
        $ch = fopen($url, "r");
        // Открываем файл для чтения
        if ($ch) {
            while (!feof($ch)) {
                $code .= fread($ch, 2097152);
                // загрузка текста (не более 2097152 байт)
            }
            fclose($ch);
            // Закрываем файл
        }
    }
    if ($bg_bibfers_option['curl'] == 'on' && function_exists('curl_init') && !$code) {
        // Попытка3. Если установлен cURL
        $url = plugins_url($book_file, dirname(__FILE__));
        // URL файла
        $ch = curl_init($url);
        // создание нового ресурса cURL
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // возврат результата передачи в качестве строки из curl_exec() вместо прямого вывода в браузер
        $code = curl_exec($ch);
        // загрузка текста
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($httpCode != '200') {
            $code = false;
        }
        // Проверка на код http 200
        curl_close($ch);
        // завершение сеанса и освобождение ресурсов
    }
    if (!$code) {
        return "";
    }
    // Увы. Паранойя хостера достигла апогея. Файл не прочитан или ошибка
    // Преобразовать json в массив
    $json = json_decode($code, true);
    if ($type == "book") {
        $verses = "<h3>" . bg_bibfers_getTitle($book) . "</h3>";
    } else {
        if ($type == "t_verses") {
            $verses = "<strong>" . bg_bibfers_getTitle($book) . "</strong><br>";
        } else {
            $verses = "";
        }
    }
    if ($type != "quote") {
        $verses = $verses . "<div>";
    }
    /*******************************************************************************
       Разбор ссылки и формирование текста стихов Библии
      
    *******************************************************************************/
    $jj = 0;
    $chr = 0;
    // Предыдущая глава
    while (preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {
        // Должно быть число - номер главы
        $jj++;
        // Защита от зацикливания (не более 10 циклов)
        if ($jj > 10) {
            return "***";
        }
        $ch1 = (int) $matches[0][0];
        $chapter = substr($chapter, (int) $matches[0][1]);
        if (preg_match("/\\:|\\,|\\-/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {
            // Допускается: двоеточие, запятая, тире или <конец строки>
            $sp = $matches[0][0];
            $chapter = substr($chapter, (int) $matches[0][1]);
        } else {
            $sp = "";
        }
        if (strcasecmp($sp, ":") == 0) {
            //		Двоеточие - далее стихи
            $ii = 0;
            while (preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {
                // Должно быть число - номер стиха
                $ii++;
                // Защита от зацикливания (не более 10 циклов)
                if ($ii > 10) {
                    return "***";
                }
                $vr1 = (int) $matches[0][0];
                $chapter = substr($chapter, (int) $matches[0][1]);
                if (preg_match("/\\:|\\,|\\-/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {
                    // Допускается:  двоеточие, запятая, тире или <конец строки>
                    $sp = $matches[0][0];
                    $chapter = substr($chapter, (int) $matches[0][1]);
                } else {
                    $sp = "";
                }
                if (strcasecmp($sp, ":") == 0) {
                    // Если двоеточие, то не номер стиха, а номер главы и далее стихи
                    $ch1 = $vr1;
                } else {
                    $ch2 = $ch1;
                    if (strcasecmp($sp, "-") == 0) {
                        preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE);
                        // Должно быть число - номер стиха
                        $vr2 = (int) $matches[0][0];
                        $chapter = substr($chapter, (int) $matches[0][1]);
                        if (preg_match("/\\:|\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {
                            // Допускается: двоеточие, запятая или <конец строки>
                            $sp = $matches[0][0];
                            $chapter = substr($chapter, (int) $matches[0][1]);
                            if (strcasecmp($sp, ":") == 0) {
                                // Если двоеточие, то не номер стиха, а номер главы и далее стихи
                                $ch2 = $vr2;
                                preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE);
                                // Должно быть число - номер стиха
                                $vr2 = (int) $matches[0][0];
                                if (preg_match("/\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {
                                    // Допускается: запятая или <конец строки>
                                    $sp = $matches[0][0];
                                    $chapter = substr($chapter, (int) $matches[0][1]);
                                } else {
                                    $sp = "";
                                }
                            } else {
                                if (strcasecmp($sp, ",") == 0) {
                                    preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE);
                                    // Должно быть число - номер стиха
                                    $sp = $matches[0][0];
                                    $chapter = substr($chapter, (int) $matches[0][1]);
                                } else {
                                    $sp = "";
                                }
                            }
                        } else {
                            $sp = "";
                        }
                    } else {
                        $vr2 = $vr1;
                    }
                    $verses = $verses . bg_bibfers_printVerses($json, $book, $chr, $ch1, $ch2, $vr1, $vr2, $type, $lang, $prll);
                    $chr = $ch1;
                    if ($sp == "") {
                        break;
                    }
                }
            }
        } else {
            //		Далее до двоеточия только главы
            if (strcasecmp($sp, "-") == 0) {
                preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE);
                // Должно быть число - номер главы
                $ch2 = (int) $matches[0][0];
                $chapter = substr($chapter, (int) $matches[0][1]);
                /*				if (preg_match("/\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {			// Допускается: запятая или <конец строки>
                					$sp = $matches[0][0];
                					$chapter = substr($chapter,(int)$matches[0][1]);
                				} else $sp = ""; */
                $vr1 = 0;
                $vr2 = 999;
                if (preg_match("/\\:|\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {
                    // Допускается: двоеточие, запятая или <конец строки>
                    $sp = $matches[0][0];
                    $chapter = substr($chapter, (int) $matches[0][1]);
                    if (strcasecmp($sp, ":") == 0) {
                        // Если двоеточие, то не номер стиха, а номер главы и далее стихи
                        preg_match("/\\d+/u", $chapter, $matches, PREG_OFFSET_CAPTURE);
                        // Должно быть число - номер стиха
                        $vr2 = (int) $matches[0][0];
                        if (preg_match("/\\,/u", $chapter, $matches, PREG_OFFSET_CAPTURE)) {
                            // Допускается: запятая или <конец строки>
                            $sp = $matches[0][0];
                            $chapter = substr($chapter, (int) $matches[0][1]);
                        } else {
                            $sp = "";
                        }
                    } else {
                        if (strcasecmp($sp, ",") == 0) {
                            $sp = $matches[0][0];
                            $chapter = substr($chapter, (int) $matches[0][1]);
                        } else {
                            $sp = "";
                        }
                    }
                } else {
                    $sp = "";
                }
            } else {
                $ch2 = $ch1;
                $vr1 = 0;
                $vr2 = 999;
            }
            $verses = $verses . bg_bibfers_printVerses($json, $book, $chr, $ch1, $ch2, $vr1, $vr2, $type, $lang, $prll);
            $chr = $ch2;
        }
        if ($sp == "") {
            break;
        }
    }
    if ($type != "quote") {
        $verses = $verses . "</div>";
    }
    return $verses;
}