bold_search.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. <?php
  2. //查询参考字典
  3. require_once '../path.php';
  4. require_once '../public/casesuf.inc';
  5. require_once '../public/union.inc';
  6. require_once "../public/_pdo.php";
  7. require_once "../public/function.php";
  8. _load_book_index();
  9. $op=$_GET["op"];
  10. $word=mb_strtolower($_GET["word"],'UTF-8');
  11. $org_word=$word;
  12. $count_return=0;
  13. global $PDO;
  14. switch($op){
  15. case "pre"://预查询
  16. $dictFileName=_FILE_DB_REF_INDEX_;
  17. PDO_Connect("sqlite:$dictFileName");
  18. echo "<div>";
  19. $query = "select word,count from dict where \"eword\" like ".$PDO->quote($word.'%')." OR \"word\" like ".$PDO->quote($word.'%')." limit 0,100";
  20. $Fetch = PDO_FetchAll($query);
  21. $iFetch=count($Fetch);
  22. if($iFetch>0){
  23. for($i=0;$i<$iFetch;$i++){
  24. $word=$Fetch[$i]["word"];
  25. $count=$Fetch[$i]["count"];
  26. echo "<div class='dict_word_list'>";
  27. echo "<a href='bold.php?key={$word}'>$word-$count</a>";
  28. echo "</div>";
  29. }
  30. }
  31. echo "</div>";
  32. break;
  33. case "search":
  34. $strDictTab="<li id=\"dt_dict\" class=\"act\" onclick=\"tab_click('dict_ref','dt_dict')\">{$_local->gui->dict}</li>";
  35. //查黑体字开始
  36. $arrBookName=json_decode(file_get_contents("../public/book_name/sc.json"));
  37. echo "<div id=\"dict_bold\" style=''>";
  38. //加语尾
  39. $arrNewWord=array();
  40. for ($row = 0; $row < count($case); $row++) {
  41. $len=mb_strlen($case[$row][0],"UTF-8");
  42. $end=mb_substr($word, 0-$len,NULL,"UTF-8");
  43. if($end==$case[$row][0]){
  44. $newWord=mb_substr($word, 0,mb_strlen($word,"UTF-8")-$len,"UTF-8").$case[$row][1];
  45. $arrNewWord[$newWord]=1;
  46. }
  47. }
  48. //加连读词尾
  49. $arrUnWord=array();
  50. for ($row = 0; $row < count($union); $row++) {
  51. $len=mb_strlen($union[$row][0],"UTF-8");
  52. foreach($arrNewWord as $x=>$x_value){
  53. $end=mb_substr($x, 0-$len,NULL,"UTF-8");
  54. if($end==$union[$row][0]){
  55. $newWord=mb_substr($x, 0,mb_strlen($x,"UTF-8")-$len,"UTF-8").$union[$row][1];
  56. $arrUnWord[$newWord]=1;
  57. }
  58. }
  59. }
  60. //将连读词和$arrNewWord混合
  61. foreach($arrUnWord as $x=>$x_value){
  62. $arrNewWord[$x]=1;
  63. }
  64. if(count($arrNewWord)>0){
  65. $strQueryWord="(";
  66. foreach($arrNewWord as $x=>$x_value) {
  67. $strQueryWord.="'{$x}',";
  68. }
  69. $strQueryWord=mb_substr($strQueryWord, 0,mb_strlen($strQueryWord,"UTF-8")-1,"UTF-8");
  70. $strQueryWord.=")";
  71. }
  72. else{
  73. $strQueryWord="('{$word}')";
  74. }
  75. $dictFileName=_FILE_DB_BOLD_;
  76. PDO_Connect("sqlite:$dictFileName");
  77. //查询符合的记录数
  78. $query = "select count(*) as co from bold where \"word2\" in $strQueryWord";
  79. $Fetch = PDO_FetchOne($query);
  80. if($Fetch>0){
  81. $strDictTab.="<li id=\"dt_bold\" onclick=\"tab_click('dict_bold','dt_bold')\">{$_local->gui->vannana}({$Fetch})</li>";
  82. echo "{$_local->gui->search}:$word {$_local->gui->find_about}{$Fetch}{$_local->gui->result}<br />";
  83. //黑体字主显示区开始
  84. echo "<div class='dict_bold_main'>";
  85. //黑体字主显示区左侧开始
  86. echo "<div class='dict_bold_left'>";
  87. echo "<button onclick=\"dict_update_bold(0)\">".$_local->gui->filter."</button>";
  88. /*查找实际出现的拼写
  89. $strQueryWord中是所有可能的拼写
  90. */
  91. $realQueryWord="(";
  92. $query = "select word2,count(word) as co from bold where \"word2\" in $strQueryWord group by word2 order by co DESC";
  93. $Fetch = PDO_FetchAll($query);
  94. $iFetch=count($Fetch);
  95. if($iFetch>0){
  96. echo "<div>";
  97. echo "<input id='bold_all_word' type='checkbox' checked='true' value='' onclick=\"dict_bold_word_all_select()\"/>{$_local->gui->all_select}<br />";
  98. for($i=0;$i<$iFetch;$i++){
  99. $realQueryWord.="'{$Fetch[$i]["word2"]}',";
  100. echo "<input id='bold_word_{$i}' type='checkbox' checked value='{$Fetch[$i]["word2"]}' />";
  101. echo "<a onclick=\"dict_bold_word_select({$i})\">";
  102. echo $Fetch[$i]["word2"].":".$Fetch[$i]["co"]."{$_local->gui->times}<br />";
  103. echo "</a>";
  104. }
  105. $realQueryWord=mb_substr($realQueryWord, 0,mb_strlen($realQueryWord,"UTF-8")-1,"UTF-8");
  106. $realQueryWord.=")";
  107. echo "<input id='bold_word_count' type='hidden' value='{$iFetch}' />";
  108. echo "</div>";
  109. }
  110. //查找这些词出现在哪些书中
  111. $query = "select book,count(word) as co from bold where \"word2\" in $realQueryWord group by book order by co DESC";
  112. $Fetch = PDO_FetchAll($query);
  113. $iFetch=count($Fetch);
  114. if($iFetch>0){
  115. echo "<div id='bold_book_list'>";
  116. echo "{$_local->gui->presented_in}{$iFetch}{$_local->gui->book}:<br />";
  117. echo "<input type='checkbox' checked='true' value='' />{$_local->gui->all_select}<br />";
  118. for($i=0;$i<$iFetch;$i++){
  119. $book=$Fetch[$i]["book"];
  120. $bookname=_get_book_info($book)->title;
  121. echo "<input id='bold_book_{$i}' type='checkbox' checked value='{$book}'/>";
  122. echo "<a onclick=\"dict_bold_book_select({$i})\">";
  123. echo "《{$bookname}》:{$Fetch[$i]["co"]}{$_local->gui->times}<br />";
  124. echo "</a>";
  125. }
  126. echo "<input id='bold_book_count' type='hidden' value='{$iFetch}' />";
  127. echo "</div>";
  128. }
  129. //查找这些词出现在哪些书中结束
  130. echo "</div>";
  131. //黑体字主显示区左侧结束
  132. //黑体字主显示区右侧开始
  133. echo "<div id=\"dict_bold_right\" style='flex:7;'>";
  134. //前20条记录
  135. $query = "select * from bold where \"word2\" in $realQueryWord limit 0,20";
  136. $Fetch = PDO_FetchAll($query);
  137. $iFetch=count($Fetch);
  138. if($iFetch>0){
  139. $dictFileName=_FILE_DB_PALITEXT_;
  140. PDO_Connect("sqlite:$dictFileName");
  141. for($i=0;$i<$iFetch;$i++){
  142. $paliword=$Fetch[$i]["word"];
  143. $book=$Fetch[$i]["book"];
  144. $bookInfo=_get_book_info($book);
  145. $bookname=$bookInfo->title;
  146. $bookPath=$bookInfo->c1.">".$bookInfo->c2.">".$bookInfo->c3;
  147. $paragraph=$Fetch[$i]["paragraph"];
  148. $base=$Fetch[$i]["base"];
  149. $pali=$Fetch[$i]["pali"];
  150. echo "<div class='dict_word'>";
  151. echo "<div class='dict'><b>《{$bookname}》</b> {$bookPath}</div>";
  152. echo "<div style='font-size: 130%;font-weight: 700;'>$paliword</div>";
  153. if(strlen($pali)>1){
  154. echo "<div class='mean'>$pali</div>";
  155. }
  156. else{
  157. $dictFileName=_FILE_DB_PALITEXT_;
  158. PDO_Connect("sqlite:$dictFileName");
  159. $query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$paragraph}' limit 0,20";
  160. $FetchPaliText = PDO_FetchAll($query);
  161. $countPaliText=count($FetchPaliText);
  162. if($countPaliText>0){
  163. for($iPali=0;$iPali<$countPaliText;$iPali++){
  164. $path="";
  165. $parent = $FetchPaliText[0]["parent"];
  166. $deep=0;
  167. $sFirstParentTitle="";
  168. while($parent>-1){
  169. $query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$parent}' limit 0,1";
  170. $FetParent = PDO_FetchAll($query);
  171. if($sFirstParentTitle==""){
  172. $sFirstParentTitle = $FetParent[0]["toc"];
  173. }
  174. $path="{$FetParent[0]["toc"]}>{$path}";
  175. $parent = $FetParent[0]["parent"];
  176. $deep++;
  177. if($deep>5){
  178. break;
  179. }
  180. }
  181. $path=$bookPath.$path."No. ".$paragraph;
  182. echo "<div class='mean'>$path</div>";
  183. if(substr($paliword,-1)=="n"){
  184. $paliword=substr($paliword,0,-1);
  185. }
  186. $htmlPara=str_replace(".0","。0",$FetchPaliText[$iPali]["html"]);
  187. $aSent=str_getcsv($htmlPara,".");
  188. echo count($aSent);
  189. $aSentInfo=array();
  190. $aBold=array();
  191. echo "<div class='wizard_par_div'>";
  192. foreach($aSent as $sent){
  193. //array_push($aSentInfo,false);
  194. //array_push($aBold,false);
  195. if(stristr($sent,$paliword)){
  196. echo "<span>{$sent}.</span><br>";
  197. // $aSent[$i]=str_replace($paliword,"<hl>{$paliword}</hl>",$aSent[$i]);
  198. //$aSentInfo[$i]=true;
  199. }
  200. //if(stristr($aSent[$i],"bld")){
  201. //$aBold[$i]=true;
  202. //}
  203. }
  204. echo "</div>";
  205. /*
  206. $output="";
  207. $bold_on=false;
  208. for($i=0;$i<count($aSent);$i++){
  209. if($aBold[$i]){
  210. if($aSentInfo[$i]){
  211. $output.=$aSent[$i]."<br>";
  212. $bold_on=true;
  213. }
  214. else{
  215. echo "<div>{$output}</div>";
  216. $output="";
  217. $bold_on=false;
  218. }
  219. }
  220. else{
  221. if($bold_on){
  222. echo "<div>{$aBold[$i]}</div>";
  223. }
  224. }
  225. }
  226. */
  227. //$light_text=str_replace($paliword,"<hl>{$paliword}</hl>",$FetchPaliText[$iPali]["vri_text"]);
  228. //$light_text=str_replace(".",".<br />",$light_text);
  229. //echo "<div class='wizard_par_div'>{$light_text}</div>";
  230. }
  231. }
  232. }
  233. echo "<div class='search_para_tools'><button onclick=\"dict_edit_now('{$book}','{$paragraph}','{$sFirstParentTitle}')\">{$_local->gui->edit_now}</button></div>";
  234. echo "</div>";
  235. }
  236. }
  237. echo "</div>";
  238. //黑体字主显示区右侧结束
  239. echo "</div>";
  240. //黑体字主显示区结束
  241. }
  242. echo "</div>";
  243. //查黑体字结束
  244. break;
  245. case "update":
  246. $target=$_GET["target"];
  247. switch($target){
  248. case "bold";
  249. $arrBookName=json_decode(file_get_contents("../public/book_name/sc.json"));
  250. $dictFileName=_FILE_DB_BOLD_;
  251. PDO_Connect("sqlite:$dictFileName");
  252. $wordlist=$_GET["wordlist"];
  253. $booklist=$_GET["booklist"];
  254. $aBookList=ltrim($booklist,"(");
  255. $aBookList=rtrim($aBookList,")");
  256. $aBookList=str_replace("'","",$aBookList);
  257. $aBookList=str_getcsv($aBookList);
  258. foreach($aBookList as $oneBook){
  259. $aInputBook["{$oneBook}"]=1;
  260. }
  261. //查找这些词出现在哪些书中
  262. $query = "select book,count(word) as co from bold where \"word2\" in $wordlist group by book order by co DESC";
  263. $Fetch = PDO_FetchAll($query);
  264. $iFetch=count($Fetch);
  265. if($iFetch>0){
  266. echo "<div id='bold_book_list_new'>";
  267. echo "出现在{$iFetch}本书中:<br />";
  268. echo "<input id='bold_all_book' type='checkbox' checked onclick=\"dict_bold_book_all_select()\" />全选<br />";
  269. for($i=0;$i<$iFetch;$i++){
  270. $book=$Fetch[$i]["book"];
  271. $bookname=$arrBookName[$book-1]->title;
  272. if(isset($aInputBook["{$book}"])){
  273. $bookcheck="checked";
  274. }
  275. else{
  276. $bookcheck="";
  277. }
  278. echo "<input id='bold_book_{$i}' type='checkbox' $bookcheck value='{$book}'/>";
  279. echo "<a onclick=\"dict_bold_book_select({$i})\">";
  280. echo "《{$bookname}》({$Fetch[$i]["co"]})<br />";
  281. echo "</a>";
  282. }
  283. echo "<input id='bold_book_count' type='hidden' value='{$iFetch}' />";
  284. echo "</div>";
  285. }
  286. //查找这些词出现在哪些书中结束
  287. //前20条记录
  288. $query = "select * from bold where \"word2\" in $wordlist and \"book\" in $booklist limit 0,20";
  289. $Fetch = PDO_FetchAll($query);
  290. $iFetch=count($Fetch);
  291. if($iFetch>0){
  292. for($i=0;$i<$iFetch;$i++){
  293. $paliword=$Fetch[$i]["word"];
  294. $book=$Fetch[$i]["book"];
  295. $bookname=$arrBookName[$book-1]->title;
  296. $c1=$arrBookName[$book-1]->c1;
  297. $c2=$arrBookName[$book-1]->c2;
  298. $bookPath = "$c1>$c2";
  299. $paragraph=$Fetch[$i]["paragraph"];
  300. $base=$Fetch[$i]["base"];
  301. $pali=$Fetch[$i]["pali"];
  302. echo "<div class='dict_word'>";
  303. echo "<div class='dict'>《{$bookname}》 $c1 $c2 </div>";
  304. echo "<div class='mean'>$paliword</div>";
  305. if(strlen($pali)>1){
  306. echo "<div class='mean'>$pali</div>";
  307. }
  308. else{
  309. $dictFileName=_FILE_DB_PALITEXT_;
  310. PDO_Connect("sqlite:$dictFileName");
  311. $query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$paragraph}' limit 0,20";
  312. $FetchPaliText = PDO_FetchAll($query);
  313. $countPaliText=count($FetchPaliText);
  314. if($countPaliText>0){
  315. for($iPali=0;$iPali<$countPaliText;$iPali++){
  316. $path="";
  317. $parent = $FetchPaliText[0]["parent"];
  318. $deep=0;
  319. $sFirstParentTitle="";
  320. while($parent>-1){
  321. $query = "select * from pali_text where \"book\" = '{$book}' and \"paragraph\" = '{$parent}' limit 0,1";
  322. $FetParent = PDO_FetchAll($query);
  323. if($sFirstParentTitle==""){
  324. $sFirstParentTitle = $FetParent[0]["toc"];
  325. }
  326. $path="{$FetParent[0]["toc"]}>{$path}";
  327. $parent = $FetParent[0]["parent"];
  328. $deep++;
  329. if($deep>5){
  330. break;
  331. }
  332. }
  333. $path="<div>{$bookPath}>{$path} No. {$paragraph}</div>";
  334. echo "<div class='mean'>$path</div>";
  335. if(substr($paliword,-1)=="n"){
  336. $paliword=substr($paliword,0,-1);
  337. }
  338. $light_text=str_replace($paliword,"<hl>{$paliword}</hl>",$FetchPaliText[$iPali]["html"]);
  339. $light_text=str_replace(".",".<br /><br />",$light_text);
  340. echo "<div class='wizard_par_div'>{$light_text}</div>";
  341. }
  342. }
  343. }
  344. echo "<div class='search_para_tools'><button onclick=\"dict_edit_now('{$book}','{$paragraph}','{$sFirstParentTitle}')\">Edit</button></div>";
  345. echo "</div>";
  346. }
  347. }
  348. break;
  349. }
  350. break;
  351. }
  352. ?>