<?php

// die("STRANGE");

function json_die($s) {
	if(empty(RE('json'))) header("Content-type: text/plain; charset=utf-8");
	else {
	    header("Content-type: application/json; charset=utf-8");
	    if(false===strpos($s,'{')) $s='{"result":"'.str_replace('"','\\"',$s).'"}';
	}
	header("Access-Control-Allow-Origin: *");
	$GLOBALS['ajax']=1;
	die(wu($s));
}

header('Content-type: text/html; charset=cp1251');

	include $_SERVER["DOCUMENT_ROOT"]."/config.php"; include_once $include_sys."_autorize.php";

    // AJAX
    if(isset($_REQUEST['a'])) { // $word=$_GET['delete'];
/*
	$ajax=1; header("Access-Control-Allow-Origin: *");
	$a=RE('a');
	$word=uw(RE('word'));
	if(!($up=$_COOKIE['unic5_']) || !($unic=u2unic($up)) || !$unic || !upcheck($up) || !getis_global($unic) || $GLOBALS['admin']!=1) idie('Error admin');


	if($a=='delete') {
	    if(!intval(ms("SELECT COUNT(*) FROM `lleoold`.`accentus` WHERE `slovo`='".e(wk($word))."'","_l",0))) otprav("ajaxoff();salert('".h($word)." - not found',500)");
	    msq("DELETE FROM `lleoold`.`accentus` WHERE `slovo`='".e(wk($word))."' LIMIT 1");
    	    otprav("ajaxoff();/"."*salert('".h($word)." - deleted',1000)*"."/");
	}
*/
	idie('Unic='.$unic." ADM:".$word);

    }


$word=(isset($_GET["word"])?$_GET["word"]:'');
if($word=='') /*&& isset($_GET['json']))*/ $word=uw(file_get_contents("php://input"));

$word=strtolower($word);

if(!empty($word)) {

    $R=array();

    if($word=='alfword') {
	$alf=(isset($_GET["alf"])?$_GET["alf"]:'а');
	if(strlen($alf)>1) $alf=uw($alf);

        $bk=str_split("абвгдежзиклмнопрстуфхцчшщэюя");
        $o='';
	$k=0;
	$r=array();
        foreach($bk as $alf) {
	// die('alf=['.h($alf).']');
	$p=ms("SELECT `slovo` FROM `lleoold`.`accentus` WHERE `slovo` LIKE '".e($alf)."%' 
AND `slovo` NOT LIKE '%-%'
AND `slovo` NOT LIKE '%\"%'
AND `slovo` NOT LIKE '%)%'
AND `slovo` NOT LIKE '%(%'
AND `slovo` NOT LIKE '%.%'
AND `slovo` NOT LIKE '%\?%'
AND `slovo` NOT LIKE '%\!%'
AND `slovo` NOT LIKE '%\;%'
AND `slovo` NOT LIKE '%\:%'
AND `slovo` NOT LIKE '%\#%'
AND `slovo` NOT LIKE '%ё%'
AND `slovo` NOT LIKE '%ъ%'
AND `slovo` NOT LIKE '%\'%'
AND `slovo` NOT LIKE '%\`%'
AND LENGTH(slovo)>2
LIMIT 174","_a1",600);

	// $o.="\n"; // <hr>============== alf = ".$alf. " length: ".sizeof($p)."\n<p>".implode(' ',$p);

	$k0=0;
	foreach($p as $e) {
	    if(++$k0 > 74) break;
	    if(++$k > 2048) break;
	    if(in_array($e,$r)) continue;
	    $r[]=$e;
	    $o.="\t\"".$e."\"".($k==2048?'':',')."\n";
	}

	//header("Content-type: application/json; charset=utf-8");
	//header("Access-Control-Allow-Origin: *");
	//die(wu(implode(' ',$p)));
	}

	header("Content-type: text/plain; charset=windows-1251");
	die("#[rustfmt::skip]
pub const WORDLIST_RUSSIAN: [&str; 2048] = [\n".$o."];"); // implode(' ',$p)."<p>strlen: ".sizeof($p));
    }


/// JSON: получить все слова длиной length или (и) начинающиеся на буквы из набора first
/// https://lleo.me/rifma/index.php?word=length&length=14
/// https://lleo.me/rifma/index.php?word=length&length=3&first=x
/// https://lleo.me/rifma/index.php?word=length&first=абвгд
/// https://lleo.me/rifma/index.php?word=length&length=14&first=абвгд
    if($word=='length') {
	// json_die('{"OK":"Success"}');
	$length=RE00('length');
	$first=uw(urldecode(RE("first")));
	if(!$length && empty($first)) json_die('{"error":"length=0"}');

	$WHE=array();
	if($length > 0)	$WHE[]="CHAR_LENGTH(slovo) = ".intval($length);
	elseif($length < 0) $WHE[]="CHAR_LENGTH(slovo) <= ".intval(-$length);
	if(!empty($first)) {
	    $fr=array(); $a=str_split($first); foreach($a as $l) $fr[]="`slovo` LIKE '".e($l)."%'";
	    $WHE[]="(".implode(' OR ',$fr).")";
	}
//	die("WHERE ".implode(' AND ',$WHE));
        $p=ms("SELECT * FROM `lleoold`.`accentus` WHERE ".implode(' AND ',$WHE),"_a1");
	json_die(implode(' ',$p));
    }

/// JSON: получить случайное слово
/// https://lleo.me/rifma/index.php?word=randword
    if($word=='randword') {
        $s=ms("SELECT * FROM `lleoold`.`accentus` LIMIT ".(rand(0,ms("SELECT COUNT(*) FROM `lleoold`.`accentus`","_l"))-1).",1","_1");
	json_die('{"word":"'.$s['slovo'].'"}');
    }

/// JSON: получить случайных 5 слов через пробел
/// https://lleo.me/rifma/index.php?word=rand5word
    if($word=='rand5word') {
	$col=ms("SELECT COUNT(*) FROM `lleoold`.`accentus`","_l");
	$p=array();for($i=0;$i<5;$i++) $p[]=ms("SELECT `slovo` FROM `lleoold`.`accentus` LIMIT ".(rand(0,$col)-1).",1","_l");
	json_die(implode(' ',$p));
    }

    $s=ms("SELECT * FROM `lleoold`.`accentus` WHERE `slovo`='".e($word)."'","_1");

    $rifma=(empty($s['rifma'])? strtr($word,"бвгджщзмцыюяэо%","пфктшшснчиуаеё#") :  $s['rifma']);

    $max=intval(isset($_GET["max"])?$_GET["max"]:0); if($max==0) $max=30; // ограничение

    $pp=ms("SELECT * FROM `lleoold`.`accentus` WHERE `rifma`='".e($rifma)."' AND `slovo`!='".e($word)."'".($max==-1?'':" LIMIT ".intval($max))    );
    print $GLOBALS['msqe'];

    foreach($pp as $p) $R[]=$p['slovo'];

    // JSON
    if(isset($_GET['json'])) {
	header("Content-type: application/json; charset=utf-8");
	header("Access-Control-Allow-Origin: *");
//	die("EE: РЎР›РћР’Рћ ВИНДА ".$word." / ".wu($word));
//    die(wu($word." ".print_r($R,1)));
	$ajax=1;
	if(sizeof($R)) {
	    $R='["'.implode('","',$R).'"]';
	} else $R='false';
	die(wu('{"rifma":'.$R.'}'));
    }

    // AJAX
    $res='';
    foreach($R as $l) { $res .= "<span id='".$l."'><a href=\"javascript:d('".$l."');\">".$l."</a></span> "; }

    if($res=='') $res="<i>ничего не найдено, извините</i>";

    $res="<blockquote style='border: 1px dashed rgb(255,0,0); padding: 20px; margin-left: 50px; margin-right: 50px; background-color: rgb(255,252,223);'><p><b><tt>".$res."</tt></b></blockquote>";

} else {

$res="<font size=1><p><br><font color=red><i>новости проекта:</i></font>

<p align=justify><b>12 апреля 2007</b>: Обнаружил ошибку в базе словаря: я полагал, что первая цифра после слова означает
номер ударной буквы, а вторая обычно 0 или номер буквы второго удароения. Но оказаывается, если в некоторых словах вторая
цифра не 0, то я вообещ не понимаю, что они означают. Тогда начинается какой-то хаос. Надо менять словарь.

<p align=justify><b>11 апреля 2007</b>: Сделал предварительный поиск по базе. Теперь можно набирать слово целиком: если оно
найдется в словаре (появится красным в строке найденных), то окончание для рифмовки определится автоматически. Вот только словарь пока дранный...

<p align=justify><b>10 апреля 2007</b>: Сделал аякс-обработку слов - с ее помощью в будущем мы будем чистить словари от гамна
общими силами: увидев слово, которое не то, что непригодно для поэзии, и но вовсе неясно, что означает (типа 'омлорефтонический'),
вы должны будете на него кликнуть, и в базу словаря пойдет сигнал, что слово следует пометить для удаления.
Можете пока потренироваться в кликаньи, но не увлекайтесь: пока работает только аякс, а запись в базу словаря еще не
сделана, усилия пропадут даром.

<p align=justify><b>09 апреля 2007</b>: Пока это макет.
Скомпилировал один из словарей. Да, я тоже в шоке от этого словаря, будет время - привинчу остальные два, они умнее.
Но пока система уже работает - ищет рифмы к нужному слову. И в общем-то, не так уж и плохо ищет. Хотя для дела использовать
эту страничку пока рано.

<p align=justify><b>08 апреля 2007</b>: Как-то сам того не желая, стихийно начал работу над проектом.
Несколько месяцев назад я в ЖЖ поспрашивал у народа насчет словарей рифм, и мне прислыли аж три словарища.
Сейчас вспомнил алгоритмы разбивки слова на слоги, выявления метрического рисунка, принципы рифмовки.
Точнее, не вспомнил, а прочитал в своем дипломном проекте от 2006 года (лежит на
сайте <a href=http://lleo.me/soft/text_dip.htm>http://lleo.me/soft/text_dip.htm</a>).
Сам зачитался - как хорошо, что я все так толково и подробно описал в 1996!
Теперь я планирую полностью восстановить свой прежний диплом в новых технологиях - сделать большую систему по поиску рифм,
генерации связного текста и автоматизированному сочинению стихов из заданого материала.

</font>

<p>&nbsp;<p>&nbsp;<center>

<p style=\"font-size:8px;\">
<a href=http://www.host.ru><IMG SRC=/zenon.gif ALT=\"Сайт хостится провайдером ZENON\" BORDER=0 width=456 height=41 border=0></a><br>
спасибо Зенон, мой вечный провайдер, что уже 11 лет терпишь меня и мои эксперименты!<br>
спасибо Володе Русинову и Сергею Берковичу за техподдержку моего проблемного сайта!

</center>";

}

die("<head><title>ПОИСК РИФМ ОНЛАЙН (в разработке)</title></head>
<body background=http://lleo.me/fon1.jpg>

<script type=\"text/javascript\" language=\"JavaScript\" src=\"/sys/JsHttpRequest.js\"></script>
<script>function d(word) {
document.getElementById(word).innerHTML = \"<font color=red>\"+word+\"</font>\";
JsHttpRequest.query('/rifma/ajax_d.php',{ action: \"d\", data: word },function(responseJS, responseText) {if (responseJS.status) {
document.getElementById(word).innerHTML = responseJS.word;
}},true);}</script>

<p>&copy; <a href=http://lleo.me>Леонид Каганов</a>

<p><center><table width=70%><td>

<center><p><font color=red>ПОИСК РИФМЫ v.2</font>

<form action='".$GLOBALS['wwwhost']."rifma/index.php' method=GET><input type=text style='border: 1px solid #330000;' size='40' name='word' value='".h($word)."'>
<input type=submit value='искать'></form>

</center>

<div style='font-size:10px'>Вводить следует не само слово, а ударное окончание, например вместо 'жопа' - 'опа', вместо 'квартет' - 'тет' или 'ет'</div>

".$res."

</td></table></center>");

?>