Jelajahi Sumber

Merge pull request #22 from visuddhinanda/master

更新install 模板库 句子库 单词索引
visuddhinanda 5 tahun lalu
induk
melakukan
a08f190325
100 mengubah file dengan 3125 tambahan dan 355 penghapusan
  1. 23 2
      .gitignore
  2. 1 1
      .vscode/settings.json
  3. 8 4
      app/dict/index.php
  4. 4 1
      app/guide/guide.css
  5. 0 0
      app/install/_FILE_DB_PALITEXT_
  6. 1 0
      app/install/count.php
  7. 1 1
      app/install/db_collact_para_bookid.php
  8. 1 1
      app/install/db_create.php
  9. 0 94
      app/install/db_create_wbw.php
  10. 12 6
      app/install/db_insert_bold.php
  11. 1 1
      app/install/db_insert_commantry.php
  12. 167 43
      app/install/db_insert_index.php
  13. 231 0
      app/install/db_insert_index_once.php
  14. 21 31
      app/install/db_insert_palitext.php
  15. 8 10
      app/install/db_insert_sentence.php
  16. 8 6
      app/install/db_insert_templet.php
  17. 1 1
      app/install/db_insert_toc.php
  18. 108 58
      app/install/db_update_palitext.php
  19. 1 1
      app/install/getbookname.php
  20. 63 0
      app/install/nav_bar.php
  21. 26 0
      app/install/palicanon_db/bold.sql
  22. 29 0
      app/install/palicanon_db/bookword.sql
  23. 69 0
      app/install/palicanon_db/index.sql
  24. 28 0
      app/install/palicanon_db/pali_sent.sql
  25. 1810 0
      app/install/palicanon_db/pali_text.sql
  26. 34 0
      app/install/palicanon_db/paliindex.sql
  27. 36 0
      app/install/palicanon_db/wordindex.sql
  28. 23 0
      app/install/readme.md
  29. 8 0
      app/install/step1.php
  30. 8 0
      app/install/step2.php
  31. 9 1
      app/install/step3.php
  32. 53 58
      app/install/step4.php
  33. 117 0
      app/install/step5.php
  34. 19 6
      app/install/xmlmaker.php
  35. 4 7
      app/path.php
  36. 1 0
      app/public/lang/default.json
  37. 1 0
      app/public/lang/en.json
  38. 1 0
      app/public/lang/my.json
  39. 1 0
      app/public/lang/si.json
  40. 5 0
      app/public/lang/zh-cn.json
  41. 1 0
      app/public/lang/zh-tw.json
  42. 2 2
      app/search/bold_search.php
  43. 2 2
      app/search/dict_find3.php
  44. 1 1
      app/search/paliword_search.php
  45. 2 2
      app/search/search.php
  46. 4 4
      app/search/toobar.php
  47. 1 1
      app/search/word_function.php
  48. 0 0
      app/studio/_FILE_DB_MESSAGE_
  49. 16 0
      dashboard/.editorconfig
  50. 9 0
      dashboard/.gitignore
  51. 8 0
      dashboard/.prettierignore
  52. 11 0
      dashboard/.prettierrc
  53. 10 0
      dashboard/.umirc.ts
  54. 0 0
      dashboard/mock/.gitkeep
  55. 32 0
      dashboard/package.json
  56. 7 0
      dashboard/src/pages/index.less
  57. 10 0
      dashboard/src/pages/index.tsx
  58. 25 0
      dashboard/tsconfig.json
  59. 8 0
      dashboard/typings.d.ts
  60. 6 2
      documents/users_guide/en/comp_split.md
  61. 10 0
      documents/users_guide/en/dict_search_input.md
  62. 5 2
      documents/users_guide/zh-cn/comp_split.md
  63. 8 4
      documents/users_guide/zh-cn/dict_search_input.md
  64. 5 2
      documents/users_guide/zh-tw/comp_split.md
  65. TEMPAT SAMPAH
      font/NotoSans/NotoSans-Black.ttf
  66. TEMPAT SAMPAH
      font/NotoSans/NotoSans-BlackItalic.ttf
  67. TEMPAT SAMPAH
      font/NotoSans/NotoSans-Bold.ttf
  68. TEMPAT SAMPAH
      font/NotoSans/NotoSans-BoldItalic.ttf
  69. TEMPAT SAMPAH
      font/NotoSans/NotoSans-ExtraBold.ttf
  70. TEMPAT SAMPAH
      font/NotoSans/NotoSans-ExtraBoldItalic.ttf
  71. TEMPAT SAMPAH
      font/NotoSans/NotoSans-ExtraLight.ttf
  72. TEMPAT SAMPAH
      font/NotoSans/NotoSans-ExtraLightItalic.ttf
  73. TEMPAT SAMPAH
      font/NotoSans/NotoSans-Italic.ttf
  74. TEMPAT SAMPAH
      font/NotoSans/NotoSans-Light.ttf
  75. TEMPAT SAMPAH
      font/NotoSans/NotoSans-LightItalic.ttf
  76. TEMPAT SAMPAH
      font/NotoSans/NotoSans-Medium.ttf
  77. TEMPAT SAMPAH
      font/NotoSans/NotoSans-MediumItalic.ttf
  78. TEMPAT SAMPAH
      font/NotoSans/NotoSans-Regular.ttf
  79. TEMPAT SAMPAH
      font/NotoSans/NotoSans-SemiBold.ttf
  80. TEMPAT SAMPAH
      font/NotoSans/NotoSans-SemiBoldItalic.ttf
  81. TEMPAT SAMPAH
      font/NotoSans/NotoSans-Thin.ttf
  82. TEMPAT SAMPAH
      font/NotoSans/NotoSans-ThinItalic.ttf
  83. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-Black.ttf
  84. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-BlackItalic.ttf
  85. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-Bold.ttf
  86. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-BoldItalic.ttf
  87. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-ExtraBold.ttf
  88. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-ExtraBoldItalic.ttf
  89. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-ExtraLight.ttf
  90. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-ExtraLightItalic.ttf
  91. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-Italic.ttf
  92. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-Light.ttf
  93. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-LightItalic.ttf
  94. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-Medium.ttf
  95. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-MediumItalic.ttf
  96. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-Regular.ttf
  97. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-SemiBold.ttf
  98. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-SemiBoldItalic.ttf
  99. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-Thin.ttf
  100. TEMPAT SAMPAH
      font/NotoSerif/NotoSerif-ThinItalic.ttf

+ 23 - 2
.gitignore

@@ -4,5 +4,26 @@
 /appdata
 /log
 /palicsv
-/palihtml
-/temp
+/temp
+/font
+/font/NotoSans
+/font/NotoSerif
+/font/NotoSerif/*.ttf
+/font/NotoSerif/NotoSerif-BoldItalic.ttf
+/font/NotoSerif/NotoSerif-ExtraBold.ttf
+/font/NotoSerif/NotoSerif-ExtraBoldItalic.ttf
+/font/NotoSerif/NotoSerif-ExtraLight.ttf
+/font/NotoSerif/NotoSerif-ExtraLightItalic.ttf
+/font/NotoSerif/NotoSerif-Italic.ttf
+/font/NotoSerif/NotoSerif-Light.ttf
+/font/NotoSerif/NotoSerif-LightItalic.ttf
+/font/NotoSerif/NotoSerif-Medium.ttf
+/font/NotoSerif/NotoSerif-MediumItalic.ttf
+/font/NotoSerif/NotoSerif-Regular.ttf
+/font/NotoSerif/NotoSerif-SemiBold.ttf
+/font/NotoSerif/NotoSerif-SemiBoldItalic.ttf
+/font/NotoSerif/NotoSerif-Thin.ttf
+/font/NotoSerif/NotoSerif-ThinItalic.ttf
+/font/NotoSerif/NotoSerif-Black.ttf
+/font/NotoSerif/NotoSerif-BlackItalic.ttf
+/font/NotoSerif/NotoSerif-Bold.ttf

+ 1 - 1
.vscode/settings.json

@@ -1,7 +1,7 @@
 {
     "files.autoSave": "onFocusChange",
     "workbench.iconTheme": "vscode-icons",
-    "workbench.colorTheme": "One Dark Pro",
+    "workbench.colorTheme": "Visual Studio Dark",
     "editor.formatOnSave": true,
     "editor.fontFamily": "source code pro",
     "editor.mouseWheelZoom": true,

+ 8 - 4
app/dict/index.php

@@ -118,11 +118,15 @@ require_once "../pcdl/html_head.php";
 	<!-- tool bar begin-->
 	<div id='search_toolbar' class="search_toolbar">
 			<div style="display:flex;justify-content: space-between;">
-				<div ></div>
-				<div>
+				<div style="flex:2;">
+					<div style="width: fit-content; margin-right: 0; margin-left: auto; margin-top: 1em; margin-bottom: 1em;">
+						<guide gid="dict_search_input"></guide>
+					</div>
+				</div>
+				<div style="flex:6;">
 					<div>
 						<div>
-						<guide gid="dict_search_input"></guide><input id="dict_ref_search_input" type="input" placeholder="<?php echo $_local->gui->search;?>" onkeyup="dict_input_keyup(event,this)" style="    margin-left: 0.5em;width: 40em;max-width: 100%;font-size:140%;padding: 0.6em;color: var(--btn-hover-bg-color);background-color: var(--btn-color);" onfocus="dict_input_onfocus()" />
+							<input id="dict_ref_search_input" type="input" placeholder="<?php echo $_local->gui->search;?>" onkeyup="dict_input_keyup(event,this)" style="    margin-left: 0.5em;width: 40em;max-width: 100%;font-size:140%;padding: 0.6em;color: var(--btn-hover-bg-color);background-color: var(--btn-color);" onfocus="dict_input_onfocus()" />
 						</div>
 						<div id="word_parts">
 							<div id="input_parts" style="font-size: 1.1em;padding: 2px 1em;"></div>
@@ -140,7 +144,7 @@ require_once "../pcdl/html_head.php";
 						</div>
 					</div>
                 </div>
-				<span>
+				<span style="flex:2;">
 				<button onclick="trubo_split()" style="height: fit-content;border: 1px solid var(--btn-border-color);background: var(--btn-color);border-radius: 4px;font-size: 1.2em;padding: 0.5em;">
 				<?php echo $_local->gui->turbo_split;//强力拆分?>
 				</button>

+ 4 - 1
app/guide/guide.css

@@ -40,4 +40,7 @@ guide:hover  .guide_contence{
 .guide_contence  h4{
     font-size:1em;
     font-weight:700;
-}
+}
+.guide_contence  li{
+    display: contents;
+}

+ 0 - 0
app/install/_FILE_DB_PALITEXT_


+ 1 - 0
app/install/count.php

@@ -5,6 +5,7 @@
 <body>
 <p><a href="index.php">Home</a></p>
 <?php
+//生成巴利语单词统计表
 $dirXmlBase="xml/";
 
 $filelist=array();

+ 1 - 1
app/install/db_collact_para_bookid.php

@@ -25,7 +25,7 @@ $to=$_GET["to"];
 $filelist=array();
 $fileNums=0;
 $log="";
-$dirLog="log/";
+$dirLog=_DIR_LOG_."/";
 $dirDb="db/";
 
 

+ 1 - 1
app/install/db_create.php

@@ -38,7 +38,7 @@ $FileName=$filelist[$from][1].".htm";
 $fileId=$filelist[$from][0];
 $fileId=$filelist[$from][0];
 
-$dirLog="log/";
+$dirLog=_DIR_LOG_."/";
 
 $dirDb="db/$res/";
 $inputFileName=$FileName;

+ 0 - 94
app/install/db_create_wbw.php

@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-</head>
-<body>
-<h2>Create WBW Databse</h2>
-<p><a href="index.php">Home</a></p>
-<?php
-include "./_pdo.php";
-if(isset($_GET["from"])==false){
-?>
-<form action="db_create_wbw.php" method="get">
-From: <input type="text" name="from"><br>
-To: <input type="text" name="to"><br>
-<input type="submit">
-</form>
-<?php
-return;
-}
-
-$from=$_GET["from"];
-$to=$_GET["to"];
-$filelist=array();
-$fileNums=0;
-$log="";
-echo "<h2>$from</h2>";
-
-if(($handle=fopen("filelist.csv",'r'))!==FALSE){
-	while(($filelist[$fileNums]=fgetcsv($handle,0,','))!==FALSE){
-		$fileNums++;
-	}
-}
-if($to==0 || $to>=$fileNums) $to=$fileNums-1;
-
-$FileName=$filelist[$from][1].".htm";
-$fileId=$filelist[$from][0];
-$fileId=$filelist[$from][0];
-
-$dirLog="log/";
-
-$dirDb="db/wbw/";
-$inputFileName=$FileName;
-$outputFileNameHead=$filelist[$from][1];
-$bookId=$filelist[$from][2];
-$vriParNum=0;
-$wordOrder=1;
-
-$dirXmlBase="xml/";
-$dirXml=$outputFileNameHead."/";
-
-
-$xmlfile = $inputFileName;
-echo "doing:".$xmlfile."<br>";
-$log=$log."$from,$FileName,open\r\n";
-
-$arrInserString=array();
-$db_file = $dirDb.$bookId.'_wbw.db3';
-PDO_Connect("sqlite:$db_file");
-
-$query="CREATE TABLE 'main' ( 'id' TEXT PRIMARY KEY NOT NULL, 'wid' TEXT, 'book' TEXT, 'paragraph' INTEGER, 'word' TEXT, 'real' TEXT, 'type' TEXT, 'gramma' TEXT, 'mean' TEXT, 'note' TEXT, 'part' TEXT, 'partmean' TEXT, 'bmc' INTEGER, 'bmt' TEXT, 'un' TEXT, 'style' TEXT, 'language'  TEXT, 'author' TEXT, 'editor' TEXT, 'revision' TEXT, 'edition' INTEGER, 'subver' INTEGER,'time' DATETIME DEFAULT CURRENT_TIMESTAMP, 'vri' INTEGER, 'sya' INTEGER, 'si' INTEGER, 'ka' INTEGER, 'pi' INTEGER, 'pa' INTEGER, 'kam' INTEGER )";
-    $stmt = @PDO_Execute($query);
-    if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
-        $error = PDO_ErrorInfo();
-        print_r($error[2]);
-        break;
-    }
-
-$query="CREATE INDEX 'search' ON \"main\" (\"book\", \"paragraph\", \"vri\" ASC)";
-    $stmt = @PDO_Execute($query);
-    if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
-        $error = PDO_ErrorInfo();
-        print_r($error[2]);
-        $log=$log."$from, $FileName, error, $error[2] \r\n";
-    }
-
-	$myLogFile = fopen($dirLog."insert_db.log", "a");
-	fwrite($myLogFile, $log);
-	fclose($myLogFile);
-?>
-
-
-<?php 
-if($from==$to){
-	echo "<h2>all done!</h2>";
-}
-else{
-	echo "<script>";
-	echo "window.location.assign(\"db_create_wbw.php?from=".($from+1)."&to=".$to."\")";
-	echo "</script>";
-	echo "正在载入:".($from+1)."——".$filelist[$from+1][0];
-}
-?>
-</body>
-</html>

+ 12 - 6
app/install/db_insert_bold.php

@@ -5,13 +5,18 @@
 <body>
 <h2>Insert to bold</h2>
 <p><a href="index.php">Home</a></p>
+<div>
+生成黑体字数据库。黑体字多数是义注复注里的单词(尤其是专有名词)解释。
+</div>
 <?php
 include "./_pdo.php";
+include "../path.php";
+
 if(isset($_GET["from"])==false){
 ?>
 <form action="db_insert_bold.php" method="get">
-From: <input type="text" name="from"><br>
-To: <input type="text" name="to"><br>
+From: <input type="text" name="from" value="0"><br>
+To: <input type="text" name="to" value="216"><br>
 <input type="submit">
 </form>
 <?php
@@ -41,16 +46,17 @@ $FileName=$filelist[$from][1].".htm";
 $fileId=$filelist[$from][0];
 $fileId=$filelist[$from][0];
 
-$dirLog="log/";
+$dirLog=_DIR_LOG_;
 
-$dirDb="db/";
+//输出文件夹
+$dirDb=_DIR_PALICANON_."/";
 $inputFileName=$FileName;
 $outputFileNameHead=$filelist[$from][1];
 $bookId=$filelist[$from][2];
 $vriParNum=0;
 $wordOrder=1;
 
-$dirXmlBase="xml/";
+$dirXmlBase=_DIR_PALI_CSV_."/";
 $dirXml=$outputFileNameHead."/";
 
 $currChapter="";
@@ -74,7 +80,7 @@ echo "doing:".$xmlfile."<br>";
 $log=$log."$from,$FileName,open\r\n";
 
 $arrInserString=array();
-$db_file = $dirDb.'bold.db3';
+$db_file = _FILE_DB_BOLD_;
 PDO_Connect("sqlite:$db_file");
 
 // 打开文件并读取数据

+ 1 - 1
app/install/db_insert_commantry.php

@@ -38,7 +38,7 @@ $FileName=$filelist[$from][1].".htm";
 $fileId=$filelist[$from][0];
 $fileId=$filelist[$from][0];
 
-$dirLog="log/";
+$dirLog=_DIR_LOG_."/";
 
 $dirDb="db/";
 $inputFileName=$FileName;

+ 167 - 43
app/install/db_insert_index.php

@@ -7,11 +7,12 @@
 <p><a href="index.php">Home</a></p>
 <?php
 include "./_pdo.php";
+include "../path.php";
 if(isset($_GET["from"])==false){
 ?>
 <form action="db_insert_index.php" method="get">
-From: <input type="text" name="from"><br>
-To: <input type="text" name="to"><br>
+From: <input type="text" name="from" value="0"><br>
+To: <input type="text" name="to" value="216"><br>
 <input type="submit">
 </form>
 <?php
@@ -21,19 +22,62 @@ return;
 $from=$_GET["from"];
 $to=$_GET["to"];
 
-$g_wordCounter=0;
-$g_wordIndexCounter=0;
-$iAllWordIndex=array();
-$sAllWord=array();
 
-$dirLog="log/";
+
+$dirLog=_DIR_LOG_."/";
 $dirDb="db/";
-$dirXmlBase="xml/";
+$dirXmlBase=_DIR_PALI_CSV_."/";
 
 $filelist=array();
 $fileNums=0;
 $log="";
 echo "<h2>$from</h2>";
+
+//已经存在的词
+$g_wordCounter=0;
+$g_wordIndexCounter=0;
+$iAllWordIndex=array();
+$sAllWord=array();
+//新加入的词
+$wordindex_max_index = 0;
+$aNewWordIndex = array(); //词内容
+$sNewWord = array(); //词头索引
+
+global $dbh_word_index;
+$dns = "sqlite:"._FILE_DB_WORD_INDEX_;
+$dbh_word_index = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+$dbh_word_index->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
+
+$query = "select id from wordindex where 1 order by id DESC ";
+	$stmt = $dbh_word_index->prepare($query);
+	$stmt->execute(array());
+	$id  = $stmt->fetch(PDO::FETCH_ASSOC);
+	if($id === FALSE){
+		$wordindex_max_index = 0;
+	}
+	else{
+		$wordindex_max_index =$id["id"];
+	}
+	$db_file = _FILE_DB_PALI_INDEX_;
+	PDO_Connect("sqlite:$db_file");
+	$query = "select id from word where 1 order by id DESC ";
+	$stmt = $PDO->prepare($query);
+	$stmt->execute(array());
+	$id  = $stmt->fetch(PDO::FETCH_ASSOC);	
+	if($id === FALSE){
+		$g_wordCounter = 0;
+	}
+	else{
+		$g_wordCounter = $id["id"];
+	}
+function dict_lookup($word){
+	global $dbh_word_index;
+	$query = "select * from wordindex where \"word\" = ? ";
+	$stmt = $dbh_word_index->prepare($query);
+	$stmt->execute(array($word));
+    return $stmt->fetch(PDO::FETCH_ASSOC);	
+}
+
 function getWordEn($strIn){
 	$out=$strIn;
 	$out=str_replace("ā","a",$out);
@@ -56,10 +100,11 @@ if(($handle=fopen("filelist.csv",'r'))!==FALSE){
 }
 if($to==0 || $to>=$fileNums) $to=$fileNums-1;
 
-	$db_file = $dirDb.'index.db3';
-	PDO_Connect("sqlite:$db_file");
+
 	
-for($iFile=$from;$iFile<=$to;$iFile++){
+//for($iFile=$from;$iFile<=$to;$iFile++)
+$iFile=$from;
+{
 
 	$FileName=$filelist[$iFile][1].".htm";
 	$fileId=$filelist[$iFile][0];
@@ -76,7 +121,6 @@ for($iFile=$from;$iFile<=$to;$iFile++){
 
 	$arrInserString=array();
 
-
 	// 打开文件并读取数据
 	$irow=0;
 	if(($fp=fopen($dirXmlBase.$dirXml.$outputFileNameHead.".csv", "r"))!==FALSE){
@@ -84,7 +128,7 @@ for($iFile=$from;$iFile<=$to;$iFile++){
 			$irow++;
 			if($irow>1){
 				$params=$data;
-				$arrInserString[count($arrInserString)]=$params;
+				$arrInserString[]=$params;
 			}
 		}
 		fclose($fp);
@@ -96,9 +140,9 @@ for($iFile=$from;$iFile<=$to;$iFile++){
 	
 
 	// 开始一个事务,关闭自动提交
-	//$PDO->beginTransaction();
-	//$query="INSERT INTO word ('id','book','paragraph','wordindex','bold') VALUES (?,?,?,?,?)";
-	//$stmt = $PDO->prepare($query);
+	$PDO->beginTransaction();
+	$query="INSERT INTO word ('id','book','paragraph','wordindex','bold') VALUES (?,?,?,?,?)";
+	$stmt = $PDO->prepare($query);
 	$count=0;
 	$count1=0;
 	$sen="";
@@ -107,7 +151,7 @@ for($iFile=$from;$iFile<=$to;$iFile++){
 	$sen_count=0;
 	$book="";
 	$paragraph="";
-	foreach($arrInserString as $oneParam){	
+	foreach($arrInserString as $oneParam){
 		if($oneParam[5]!=""){
 			$g_wordCounter++;
 			$book=substr($oneParam[2],1);
@@ -121,6 +165,7 @@ for($iFile=$from;$iFile<=$to;$iFile++){
 			}			
 			
 			if(isset($sAllWord[$word])){
+				//已经存在的词
 				$wordindex=$sAllWord[$word];
 				
 				$iAllWordIndex[$wordindex][1]++;
@@ -132,33 +177,62 @@ for($iFile=$from;$iFile<=$to;$iFile++){
 				}
 				
 			}
+			else if(isset($sNewWord[$word])){
+				//是新家入的词
+				$wordindex=$sNewWord[$word];
+				
+				$aNewWordIndex[$wordindex][1]++;
+				if($bold==1){
+					$aNewWordIndex[$wordindex][3]++;
+				}
+				else{
+					$aNewWordIndex[$wordindex][2]++;
+				}
+			}
+			else if(($lookup=dict_lookup($word)) !== FALSE){
+				//在数据库中找到
+				$wordindex=$lookup["id"];
+				$sAllWord[$word]=$wordindex;
+				$iAllWordIndex[$wordindex][0]=$word;
+				
+				$iAllWordIndex[$wordindex][1]=$lookup["count"] + 1;//all word count
+				if($bold==1){
+					$iAllWordIndex[$wordindex][2] = $lookup["normal"] ;
+					$iAllWordIndex[$wordindex][3] = $lookup["bold"] + 1;
+				}
+				else{
+					$iAllWordIndex[$wordindex][2] = $lookup["normal"] + 1;
+					$iAllWordIndex[$wordindex][3] = $lookup["bold"] ;
+				}
+			}
 			else{
-				$wordindex=$g_wordIndexCounter;
-				$sAllWord[$word]=$g_wordIndexCounter;
+				//数据库里也没找到 怎么办呢?我想呀想 想呀想
+				$wordindex=$wordindex_max_index + 1;
+				$sNewWord[$word]=$wordindex;
 				
-				$iAllWordIndex[$g_wordIndexCounter][0]=$word;
+				$aNewWordIndex[$wordindex][0]=$word;
 				
-				$iAllWordIndex[$g_wordIndexCounter][1]=1;//all word count
+				$aNewWordIndex[$wordindex][1]=1;//all word count
 				if($bold==1){
-					$iAllWordIndex[$g_wordIndexCounter][2]=0;
-					$iAllWordIndex[$g_wordIndexCounter][3]=1;
+					$aNewWordIndex[$wordindex][2]=0;
+					$aNewWordIndex[$wordindex][3]=1;
 				}
 				else{
-					$iAllWordIndex[$g_wordIndexCounter][2]=1;
-					$iAllWordIndex[$g_wordIndexCounter][3]=0;
+					$aNewWordIndex[$wordindex][2]=1;
+					$aNewWordIndex[$wordindex][3]=0;
 				}
 				
-				$g_wordIndexCounter++;
+				$wordindex_max_index++;
 			}
 		
 	
-			//$newWord=array($g_wordCounter,$book,$paragraph,$wordindex,$bold);
-			//$stmt->execute($newWord);
+			$newWord=array($g_wordCounter,$book,$paragraph,$wordindex,$bold);
+			$stmt->execute($newWord);
 			$count++;
 		}
 
 	}
-	/*
+	
 	// 提交更改 
 	$PDO->commit();
 	if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
@@ -170,44 +244,94 @@ for($iFile=$from;$iFile<=$to;$iFile++){
 		echo "updata $count recorders.<br />";
 		$log.="updata $count recorders.\r\n";
 	}
-*/
+
 }
+//更新单词索引表
 
+//首先插入新的词
 	// 开始一个事务,关闭自动提交
-	$PDO->beginTransaction();
-	$query="INSERT INTO wordindex ('id','word','word_en','count','normal','bold','is_base','len') VALUES (?,?,?,?,?,?,?,?)";
-	$stmt = $PDO->prepare($query);
+	$dbh_word_index->beginTransaction();
+	$query="INSERT INTO wordindex ('id','word','word_en','count','normal','bold','is_base','len') VALUES ( ? , ? , ? , ? , ? , ? , ? , ? )";
+	$stmt = $dbh_word_index->prepare($query);
 	
-	echo count($iAllWordIndex)."words<br>";
-	for($iword=0;$iword<count($iAllWordIndex);$iword++){
+	echo "INSERT:".count($aNewWordIndex)."words<br>";
+	foreach($aNewWordIndex as $wIndex => $info){
 		$wordindex=$iword;
-		$newWord=array($wordindex,$iAllWordIndex[$iword][0],getWordEn($iAllWordIndex[$iword][0]),$iAllWordIndex[$iword][1],$iAllWordIndex[$iword][2],$iAllWordIndex[$iword][3],0,mb_strlen($iAllWordIndex[$iword][0],"UTF-8"));
-		//echo "<br>{$newWord[0]}-{$newWord[1]}-{$newWord[2]}-{$newWord[3]}-{$newWord[4]}-{$newWord[5]}-<br />";
+		$newWord=array(
+								$wIndex,
+								$info[0],
+								getWordEn($info[0]),
+								$info[1],
+								$info[2],
+								$info[3],
+								0,
+								mb_strlen($info[0],"UTF-8")
+							);
 		$stmt->execute($newWord);
 	}
+	// 提交更改 
+	$dbh_word_index->commit();
+	if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
+		$error = $dbh_word_index->errorInfo();
+		echo "error - $error[2] <br>";
+		$log.="$from, $FileName, error, $error[2] \r\n";
+	}
+	else{
+		echo "updata iword recorders.<br />";
+		$log.="updata iword recorders.\r\n";
+	}
+	
 
+//然后修改已经有的词
+	// 开始一个事务,关闭自动提交
+	$dbh_word_index->beginTransaction();
+	$query="UPDATE wordindex SET count = ? , normal = ? , bold = ?   where  id = ?  ";
+	$stmt = $dbh_word_index->prepare($query);
 	
+	echo "UPDATE:".count($iAllWordIndex)."words<br>";
+	foreach($iAllWordIndex as $wIndex => $info){
+		$wordindex=$iword;
+		$newWord=array(
+								$info[1],
+								$info[2],
+								$info[3],
+								$wIndex
+							);
+		$stmt->execute($newWord);
+	}
 	// 提交更改 
-	$PDO->commit();
+	$dbh_word_index->commit();
 	if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
-		$error = PDO_ErrorInfo();
+		$error = $dbh_word_index->errorInfo();
 		echo "error - $error[2] <br>";
 		$log.="$from, $FileName, error, $error[2] \r\n";
 	}
 	else{
 		echo "updata iword recorders.<br />";
 		$log.="updata iword recorders.\r\n";
-	}			
-	
+	}
+
+
+
 	$myLogFile = fopen($dirLog."insert_index.log", "a");
 	fwrite($myLogFile, $log);
 	fclose($myLogFile);
 	
-	
-	echo "<h2>all done!</h2>";	
+
 ?>
 
 
+<?php 
 
+if($from>=$to){
+	echo "<h2>all done!</h2>";
+}
+else{
+	echo "<script>";
+	echo "window.location.assign(\"db_insert_index.php?from=".($from+1)."&to=".$to."\")";
+	echo "</script>";
+	echo "正在载入:".($from+1)."——".$filelist[$from+1][0];
+}
+?>
 </body>
 </html>

+ 231 - 0
app/install/db_insert_index_once.php

@@ -0,0 +1,231 @@
+<?php
+include "./_pdo.php";
+include "../path.php";
+
+if (PHP_SAPI  == "cli") {
+	echo $argc;
+	if($argc>=3){
+		$from=$argv[1];
+		$to=$argv[2];
+		echo "From: {$from} To:{$to}";
+	}
+	else if($argc>=1){
+		$from=0;
+		$to = 216;
+		echo "生成全部217本书";
+	}
+	else{
+		echo "参数错误";
+		exit;
+	}
+
+}
+else{
+	echo "<!DOCTYPE html><html><head></head>";
+	echo "<body><h2>Insert to Index</h2>";
+
+	if(isset($_GET["from"])==false){
+		echo '<form action="db_insert_index_once.php" method="get">';
+		echo 'From: <input type="text" name="from" value="0"><br>';
+		echo 'To: <input type="text" name="to" value="216"><br>';
+		echo '<input type="submit">';
+		echo '</form>';
+		exit;
+	}
+	else{
+		$from=$_GET["from"];
+		$to=$_GET["to"];
+	}
+}
+
+
+$g_wordCounter=0;
+$g_wordIndexCounter=0;
+$iAllWordIndex=array();
+$sAllWord=array();
+
+$dirLog=_DIR_LOG_."/";
+
+$dirXmlBase=_DIR_PALI_CSV_."/";
+
+$filelist=array();
+$fileNums=0;
+$log="";
+echo "<h2>$from</h2>";
+function getWordEn($strIn){
+	$out=$strIn;
+	$out=str_replace("ā","a",$out);
+	$out=str_replace("ī","i",$out);
+	$out=str_replace("ū","u",$out);
+	$out=str_replace("ṅ","n",$out);
+	$out=str_replace("ñ","n",$out);
+	$out=str_replace("ṭ","t",$out);
+	$out=str_replace("ḍ","d",$out);
+	$out=str_replace("ṇ","n",$out);
+	$out=str_replace("ḷ","l",$out);
+	$out=str_replace("ṃ","m",$out);
+	return($out);
+}
+
+if(($handle=fopen("filelist.csv",'r'))!==FALSE){
+	while(($filelist[$fileNums]=fgetcsv($handle,0,','))!==FALSE){
+		$fileNums++;
+	}
+}
+if($to==0 || $to>=$fileNums) $to=$fileNums-1;
+
+	$db_file = _FILE_DB_INDEX_;
+	PDO_Connect("sqlite:$db_file");
+	
+for($iFile=$from;$iFile<=$to;$iFile++){
+    echo "<h3>{$iFile}</h3>";
+	$FileName=$filelist[$iFile][1].".htm";
+	$fileId=$filelist[$iFile][0];
+
+	$inputFileName=$FileName;
+	$outputFileNameHead=$filelist[$iFile][1];
+	$bookId=$filelist[$iFile][2];
+
+	$dirXml=$outputFileNameHead."/";
+
+	$xmlfile = $inputFileName;
+	echo "doing:".$xmlfile."<br>";
+	$log=$log."$iFile,$FileName,open\r\n";
+
+	$arrInserString=array();
+
+
+	// 打开文件并读取数据
+	$irow=0;
+	if(($fp=fopen($dirXmlBase.$dirXml.$outputFileNameHead.".csv", "r"))!==FALSE){
+		while(($data=fgetcsv($fp,0,','))!==FALSE){
+			$irow++;
+			if($irow>1){
+				$params=$data;
+				$arrInserString[count($arrInserString)]=$params;
+			}
+		}
+		fclose($fp);
+		echo "单词表load:".$dirXmlBase.$dirXml.$outputFileNameHead.".csv<br>";
+	}
+	else{
+		echo "can not open csv file. filename=".$dirXmlBase.$dirXml.$outputFileNameHead.".csv";
+	}
+	
+
+	// 开始一个事务,关闭自动提交
+	$PDO->beginTransaction();
+	$query="INSERT INTO word ('id','book','paragraph','wordindex','bold') VALUES (?,?,?,?,?)";
+	$stmt = $PDO->prepare($query);
+	$count=0;
+	$count1=0;
+	$sen="";
+	$sen1="";
+	$sen_en="";
+	$sen_count=0;
+	$book="";
+	$paragraph="";
+	foreach($arrInserString as $oneParam){	
+		if($oneParam[5]!=""){
+			$g_wordCounter++;
+			$book=substr($oneParam[2],1);
+			$paragraph=$oneParam[3];
+			$word=$oneParam[5];
+			if($oneParam[15]=="bld" ){
+				$bold=1;
+			}
+			else{
+				$bold=0;
+			}			
+			
+			if(isset($sAllWord[$word])){
+				$wordindex=$sAllWord[$word];
+				
+				$iAllWordIndex[$wordindex][1]++;
+				if($bold==1){
+					$iAllWordIndex[$wordindex][3]++;
+				}
+				else{
+					$iAllWordIndex[$wordindex][2]++;
+				}
+				
+			}
+			else{
+				$wordindex=$g_wordIndexCounter;
+				$sAllWord[$word]=$g_wordIndexCounter;
+				
+				$iAllWordIndex[$g_wordIndexCounter][0]=$word;
+				
+				$iAllWordIndex[$g_wordIndexCounter][1]=1;//all word count
+				if($bold==1){
+					$iAllWordIndex[$g_wordIndexCounter][2]=0;
+					$iAllWordIndex[$g_wordIndexCounter][3]=1;
+				}
+				else{
+					$iAllWordIndex[$g_wordIndexCounter][2]=1;
+					$iAllWordIndex[$g_wordIndexCounter][3]=0;
+				}
+				
+				$g_wordIndexCounter++;
+			}
+		
+	
+			$newWord=array($g_wordCounter,$book,$paragraph,$wordindex,$bold);
+			$stmt->execute($newWord);
+			$count++;
+		}
+
+	}
+	
+	// 提交更改 
+	$PDO->commit();
+	if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
+		$error = PDO_ErrorInfo();
+		echo "error - $error[2] <br>";
+		$log.="$from, $FileName, error, $error[2] \r\n";
+	}
+	else{
+		echo "updata $count recorders.<br />";
+		$log.="updata $count recorders.\r\n";
+	}
+
+}
+
+	// 开始一个事务,关闭自动提交
+	$PDO->beginTransaction();
+	$query="INSERT INTO wordindex ('id','word','word_en','count','normal','bold','is_base','len') VALUES (?,?,?,?,?,?,?,?)";
+	$stmt = $PDO->prepare($query);
+	
+	echo count($iAllWordIndex)."words<br>";
+	for($iword=0;$iword<count($iAllWordIndex);$iword++){
+		$wordindex=$iword;
+		$newWord=array($wordindex,$iAllWordIndex[$iword][0],getWordEn($iAllWordIndex[$iword][0]),$iAllWordIndex[$iword][1],$iAllWordIndex[$iword][2],$iAllWordIndex[$iword][3],0,mb_strlen($iAllWordIndex[$iword][0],"UTF-8"));
+		//echo "<br>{$newWord[0]}-{$newWord[1]}-{$newWord[2]}-{$newWord[3]}-{$newWord[4]}-{$newWord[5]}-<br />";
+		$stmt->execute($newWord);
+	}
+
+	
+	// 提交更改 
+	$PDO->commit();
+	if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
+		$error = PDO_ErrorInfo();
+		echo "error - $error[2] <br>";
+		$log.="$from, $FileName, error, $error[2] \r\n";
+	}
+	else{
+		echo "updata iword recorders.<br />";
+		$log.="updata iword recorders.\r\n";
+	}			
+	
+	$myLogFile = fopen($dirLog."insert_index.log", "a");
+	fwrite($myLogFile, $log);
+	fclose($myLogFile);
+	
+	
+	echo "<h2>all done!</h2>";	
+?>
+
+
+
+</body>
+</html>

+ 21 - 31
app/install/db_insert_palitext.php

@@ -6,12 +6,13 @@
 <h2>Insert Pali Text To DB</h2>
 <p><a href="index.php">Home</a></p>
 <?php
-include "./_pdo.php";
+require_once "./_pdo.php";
+require_once "../path.php";
 if(isset($_GET["from"])==false){
 ?>
 <form action="db_insert_palitext.php" method="get">
-From: <input type="text" name="from"><br>
-To: <input type="text" name="to"><br>
+From: <input type="text" name="from" value="0"><br>
+To: <input type="text" name="to" value="216"><br>
 <input type="submit">
 </form>
 <?php
@@ -36,17 +37,16 @@ $FileName=$filelist[$from][1].".htm";
 $fileId=$filelist[$from][0];
 $fileId=$filelist[$from][0];
 
-$dirLog="log/";
+$dirLog=_DIR_LOG_."/";
 
-$dirDb="db/templet/";
 $inputFileName=$FileName;
 $outputFileNameHead=$filelist[$from][1];
 $bookId=$filelist[$from][2];
 $vriParNum=0;
 $wordOrder=1;
 
-$dirXmlBase="xml/";
-$dirPaliTextBase="pali-text/";
+$dirXmlBase=_DIR_PALI_CSV_."/";
+$dirPaliTextBase=_DIR_PALI_HTML_."/";
 $dirXml=$outputFileNameHead."/";
 
 
@@ -56,26 +56,10 @@ echo "doing:".$xmlfile."<br>";
 $log=$log."$from,$FileName,open\r\n";
 
 $arrInserString=array();
-$db_file = $dirDb.$bookId.'_pali.db3';
+$db_file =_FILE_DB_PALITEXT_;
 PDO_Connect("sqlite:$db_file");
 
-$query="CREATE TABLE 'data' ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , 'paragraph' INTEGER, 'language' TEXT, 'anchor' TEXT, 'text' TEXT, 'author' TEXT, 'editor' TEXT, 'revision' TEXT, 'edition' INTEGER, 'subver' INTEGER,'time' DATETIME DEFAULT CURRENT_TIMESTAMP)";
-    $stmt = @PDO_Execute($query);
-    if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
-        $error = PDO_ErrorInfo();
-        print_r($error[2]);
-        break;
-    }
-
-	$query="CREATE INDEX 'search' ON \"data\" (\"paragraph\",\"language\",\"author\", \"editor\", \"revision\", \"edition\", \"subver\" , \"time\" )";
-    $stmt = @PDO_Execute($query);
-    if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
-        $error = PDO_ErrorInfo();
-        print_r($error[2]);
-        $log=$log."$from, $FileName, error, $error[2] \r\n";
-    }
-
-// 打开文件并读取数据
+// 打开vri html文件并读取数据
 $pali_text_array=array();
 if(($fpPaliText=fopen($dirPaliTextBase.$xmlfile, "r"))!==FALSE){
 	while(($data=fgets($fpPaliText))!==FALSE){
@@ -87,15 +71,15 @@ if(($fpPaliText=fopen($dirPaliTextBase.$xmlfile, "r"))!==FALSE){
 else{
 	echo "can not pali text file. filename=".$dirPaliTextBase.$xmlfile;
 }
+
 $inputRow=0;
 if(($fp=fopen($dirXmlBase.$dirXml.$outputFileNameHead."_pali.csv", "r"))!==FALSE){
-	while(($data=fgetcsv($fp,0,','))!==FALSE){
+	while(($data=fgetcsv($fp , 0 , ',' )) !== FALSE ){
 		if($inputRow>0){
 		if(($inputRow-1)<count($pali_text_array)){
-			$data[6]=$pali_text_array[$inputRow-1];
+			$data[5]=$pali_text_array[$inputRow-1];
 		}
-		$params=$data;
-		$arrInserString[count($arrInserString)]=$params;
+		$arrInserString[]=$data;
 		}
 		$inputRow++;
 	}
@@ -113,10 +97,16 @@ $log=$log."$from, $FileName,error,文件行数不匹配 inputRow=$inputRow pali_
 // 开始一个事务,关闭自动提交
 $PDO->beginTransaction();
 
-$query="INSERT INTO data ('id','paragraph','language','anchor','text','author','editor','revision','edition','subver') VALUES (NULL,?,?,?,?,?,?,?,?,?)";
+$query="INSERT INTO pali_text ('id', 'book','paragraph','level','class','toc','text','html','lenght') VALUES (NULL, ? , ? , ? , ? , ? , ? , ?,? )";
 $stmt = $PDO->prepare($query);
 foreach($arrInserString as $oneParam){
-	$newData=array($oneParam[2],"pali","",$oneParam[6],"PCSD","PCSD","","1","0");
+	if($oneParam[3]<100){
+		$toc = $oneParam[6];
+	}
+	else{
+		$toc = "";
+	}
+	$newData=array($from+1, $oneParam[2], $oneParam[3], $oneParam[4], $toc , $oneParam[6], $oneParam[5], mb_strlen($oneParam[6],"UTF-8"));
 	$stmt->execute($newData);
 }
 // 提交更改 

+ 8 - 10
app/install/db_insert_sentence.php

@@ -1,4 +1,5 @@
-<!DOCTYPE html>
+<!--句子库生成-->
+<!DOCTYPE html>
 <html>
 <head>
 </head>
@@ -8,7 +9,8 @@
 <?php
 include "./_pdo.php";
 require_once '../path.php';
-$db_file = _DIR_TEMP_."/pali_sent.db3";
+
+$db_file =_FILE_DB_PALI_SENTENCE_;
 $thisfile = '.'.mb_substr(__FILE__,mb_strlen(__DIR__));
 if(isset($_GET["from"])==false){
 ?>
@@ -18,13 +20,10 @@ To: <input type="text" value="216" name="to"><br>
 <input type="submit">
 </form>
 <?php
-if(file_exists($db_file)){
-	if(!unlink($db_file)){
-		echo "error: can not delete file "._DIR_TEMP_."/pali_sent.db3";
-		return;
-	}
-}
+
 		PDO_Connect("sqlite:$db_file");
+
+		
 		$query="CREATE TABLE pali_sent (
     id        INTEGER PRIMARY KEY AUTOINCREMENT,
     book      INTEGER,
@@ -76,7 +75,7 @@ $FileName=$filelist[$from][1].".htm";
 $fileId=$filelist[$from][0];
 $fileId=$filelist[$from][0];
 
-$dirLog="log/";
+$dirLog=_DIR_LOG_."/";
 
 $dirDb="db/";
 $inputFileName=$FileName;
@@ -209,7 +208,6 @@ if(($fp=fopen($dirXmlBase.$dirXml.$outputFileNameHead.".csv", "r"))!==FALSE){
 			else if($pre[4]==")" && $Note_Mark==1){
 				$Note_Mark=0;
 			}
-			
 
 			if($curr[15]!="note" || mb_substr($curr[1],0,5,"UTF-8")!="gatha"){
 				if($curr[4]=="."  && !is_numeric($pre[4]) && $next[3]==$iCurrPara && $Note_Mark==0){//以.結尾且非註釋

+ 8 - 6
app/install/db_insert_templet.php

@@ -42,16 +42,16 @@ $FileName=$filelist[$from][1].".htm";
 $fileId=$filelist[$from][0];
 $fileId=$filelist[$from][0];
 
-$dirLog="log/";
+$dirLog=_DIR_LOG_;
 
-$dirDb="db/templet/";
+$dirDb=_DIR_PALICANON_TEMPLET_;
 $inputFileName=$FileName;
 $outputFileNameHead=$filelist[$from][1];
 $bookId=$filelist[$from][2];
 $vriParNum=0;
 $wordOrder=1;
 
-$dirXmlBase="xml/";
+$dirXmlBase=_DIR_PALI_CSV_."/";
 $dirXml=$outputFileNameHead."/";
 
 $currChapter="";
@@ -77,9 +77,10 @@ echo "doing:".$xmlfile."<br>";
 $log=$log."$from,$FileName,open\r\n";
 
 $arrInserString=array();
-$db_file = $dirDb.$bookId.'_tpl.db3';
+$db_file = $dirDb."/".$bookId.'_tpl.db3';
 PDO_Connect("sqlite:$db_file");
 
+PDO_Execute("DROP TABLE IF EXISTS main;");
 $query="CREATE TABLE 'main' ( 'id' TEXT PRIMARY KEY NOT NULL, 
 							'book' INTEGER, 
 							'paragraph' INTEGER, 
@@ -95,8 +96,9 @@ $query="CREATE TABLE 'main' ( 'id' TEXT PRIMARY KEY NOT NULL,
         $error = PDO_ErrorInfo();
         print_r($error[2]);
 
-    }
-
+	}
+	PDO_Execute("DROP INDEX IF EXISTS search;");
+	
 $query="CREATE INDEX 'search' ON \"main\" (\"book\", \"paragraph\", \"wid\" ASC)";
     $stmt = @PDO_Execute($query);
     if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {

+ 1 - 1
app/install/db_insert_toc.php

@@ -36,7 +36,7 @@ $FileName=$filelist[$from][1].".htm";
 $fileId=$filelist[$from][0];
 $fileId=$filelist[$from][0];
 
-$dirLog="log/";
+$dirLog=_DIR_LOG_."/";
 
 $dirDb="db/";
 $inputFileName=$FileName;

+ 108 - 58
app/install/db_update_palitext.php

@@ -1,17 +1,21 @@
-<!DOCTYPE html>
+<?php
+require_once '../path.php';
+require_once "../public/_pdo.php";
+?>
+<!DOCTYPE html>
 <html>
 <head>
 </head>
 <body>
-<h2>Update Pali Text To single DB</h2>
+<h2>Update Pali Text in single DB</h2>
 <p><a href="index.php">Home</a></p>
 <?php
-include "../public/_pdo.php";
+
 if(isset($_GET["from"])==false){
 ?>
 <form action="db_update_palitext.php" method="get">
-From: <input type="text" name="from"><br>
-To: <input type="text" name="to"><br>
+From: <input type="text" name="from" value="0"><br> 
+To: <input type="text" name="to" value="216"><br>
 <input type="submit">
 </form>
 <?php
@@ -36,24 +40,25 @@ $FileName=$filelist[$from][1].".htm";
 $fileId=$filelist[$from][0];
 $fileId=$filelist[$from][0];
 
-$dirLog="log/";
+$dirLog=_DIR_LOG_."/";
 
-$dirDb="db/";
+$dirDb="/";
 $inputFileName=$FileName;
 $outputFileNameHead=$filelist[$from][1];
 $bookId=$filelist[$from][2];
 $vriParNum=0;
 $wordOrder=1;
 
-$dirXmlBase="xml/";
-$dirPaliTextBase="pali-text/";
+$dirXmlBase=_DIR_PALI_CSV_."/";
+$dirPaliTextBase=_DIR_PALI_HTML_."/";
 $dirXml=$outputFileNameHead."/";
 
 
 
 $xmlfile = $inputFileName;
 echo "doing:".$xmlfile."<br>";
-$log=$log."$from,$FileName,open\r\n";
+
+$log=$log.date("Y-m-d h:i:sa").",$from,$FileName,open\r\n";
 
 $arrInserString=array();
 
@@ -71,16 +76,14 @@ if(($fpPaliText=fopen($dirPaliTextBase.$xmlfile, "r"))!==FALSE){
 else{
 	echo "can not pali text file. filename=".$dirPaliTextBase.$xmlfile;
 }
-// 打开text文件并读取数据
+
+// 打开csv文件并读取数据
 $inputRow=0;
-if(($fp=fopen($dirXmlBase.$dirXml.$outputFileNameHead."_pali.csv", "r"))!==FALSE){
+if(($fp=fopen(_DIR_PALI_TITLE_."/".($from+1)."_title.csv", "r"))!==FALSE){
 	while(($data=fgetcsv($fp,0,','))!==FALSE){
 		if($inputRow>0){
-		//if(($inputRow-1)<count($pali_text_array)){
-		//	$data[6]=$pali_text_array[$inputRow-1];
-		//}
-		$params=$data;
-		array_push($arrInserString,$params);
+			$params=$data;
+			array_push($arrInserString,$params);
 		}
 		$inputRow++;
 	}
@@ -91,57 +94,102 @@ else{
 	echo "can not open csv file. filename=".$dirXmlBase.$dirXml.$outputFileNameHead.".csv";
 }
 
-if(($inputRow-1)!=count($pali_text_array)){
-$log=$log."$from, $FileName,error,文件行数不匹配 inputRow=$inputRow pali_text_array=".count($pali_text_array)." \r\n";
+if((count($arrInserString))  != count($pali_text_array)-2){
+	$log=$log."$from, $FileName,error,文件行数不匹配 csv = ".(count($arrInserString)-1) ." pali_text_array=".(count($pali_text_array)-2)." \r\n";
 }
 
 $book=$from+1;
-$db_file = "pali_text_new/p{$book}_pali.db3";
-PDO_Connect("sqlite:$db_file");
-$query = "select paragraph,level,text from data where 1";
-echo $query;
-$Fetch_old = PDO_FetchAll($query);
 
+//计算段落信息,如上一段
+PDO_Connect("sqlite:"._FILE_DB_PALITEXT_);
+$query="select * from pali_text where book = '$book' ";
+$title_data = PDO_FetchAll($query);
+echo  "Paragraph Count:".count($title_data)."<br>";
+
+$paragraph_count = count($title_data);
 
-$db_file = $dirDb.'pali_text.db3';
-PDO_Connect("sqlite:$db_file");
 // 开始一个事务,关闭自动提交
 $PDO->beginTransaction();
-/*
-$query ="UPDATE pali_text SET text = ? WHERE book=? and paragraph=?";
+$query ="UPDATE pali_text SET level = ? , toc = ? , chapter_len = ? , next_chapter = ?, prev_chapter=? , parent= ?  ,  chapter_strlen = ?  WHERE book=? and paragraph=?";
 $stmt = $PDO->prepare($query);
-foreach($arrInserString as $oneParam){
-	$bookid=substr($oneParam[1],1);
-	$newData=array($oneParam[6],
-				   $bookid,
-				   $oneParam[2]);
-	$stmt->execute($newData);
+
+$paragraph_info = array();
+array_push($paragraph_info,array($from,-1,$paragraph_count,-1,-1,-1));
+for($iPar=0;$iPar < count($title_data); $iPar++){
+	$title_data[$iPar]["level"] = $arrInserString[$iPar][3];
 }
-*/
-$query ="UPDATE pali_text SET level = ? , toc = ? WHERE book=? and paragraph=?";
-$stmt = $PDO->prepare($query);
-foreach($Fetch_old as $onePara){
-	$level=$onePara["level"];
-	if($level==0){
-		$level=100;
-	}
-	if($level==100){
-		$maxLen=40;
-		if(mb_strlen($onePara["text"],"UTF-8")>$maxLen){
-			$toc=ltrim(mb_substr($onePara["text"],0,$maxLen,"UTF-8"))."…";
+
+for($iPar=0;$iPar < count($title_data); $iPar++){
+	$book=$from+1;
+	$paragraph=$title_data[$iPar]["paragraph"];
+	
+	if($title_data[$iPar]["level"]==8){
+		$title_data[$iPar]["level"]=100;
+	}				
+	$curr_level=$title_data[$iPar]["level"];
+
+	
+	$length=-1;
+	for($iPar1=$iPar+1;$iPar1<count($title_data); $iPar1++){
+		if($title_data[$iPar1]["level"]<=$curr_level){
+			$length=$title_data[$iPar1]["paragraph"]-$paragraph;
+			break;
 		}
-		else{
-			$toc=ltrim($onePara["text"]);
+	}
+	if($length==-1){
+		$length=$paragraph_count-$paragraph+1;
+	}
+	
+	$prev=-1;
+	if($iPar>0){
+		for($iPar1=$iPar-1;$iPar1>=0; $iPar1--){
+			if($title_data[$iPar1]["level"]==$curr_level){
+				$prev=$title_data[$iPar1]["paragraph"];
+				break;
+			}
 		}
 	}
-	else{
-		$toc=ltrim($onePara["text"]);
+	
+	$next=-1;
+	if($iPar<count($title_data)-1){
+		for($iPar1=$iPar+1;$iPar1<count($title_data); $iPar1++){
+			if($title_data[$iPar1]["level"]==$curr_level){
+				$next=$title_data[$iPar1]["paragraph"];
+				break;
+			}
+		}
+	}		
+	
+	$parent=-1;
+	if($iPar>0){
+		for($iPar1=$iPar-1;$iPar1>=0; $iPar1--){
+			if($title_data[$iPar1]["level"]<$curr_level){
+				$parent=$title_data[$iPar1]["paragraph"];
+				break;
+			}
+		}
+	}				
+	//计算章节包含总字符数
+	$iChapter_strlen = 0;
+	for($i = $iPar ; $i < $iPar+$length; $i++ ){
+		$iChapter_strlen += $title_data[$i]["lenght"];
 	}
-	$newData=array($level,
-				   $toc,
-				   $book,
-				   $onePara["paragraph"]);
+	$newData=array(
+		$arrInserString[$iPar][3],
+		$arrInserString[$iPar][5],
+		$length,
+	   $next,
+	   $prev,
+	   $parent,
+	   $iChapter_strlen,
+	   $book,
+	   $paragraph
+	);
 	$stmt->execute($newData);
+	
+	if($curr_level>0 && $curr_level<8){
+		array_push($paragraph_info,array($book,$paragraph,$length,$prev,$next,$parent));
+	}
 }
 
 // 提交更改 
@@ -153,15 +201,17 @@ if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
 	$log=$log."$from, $FileName, error, $error[2] \r\n";
 }
 else{
-	$count=count($arrInserString);
-	echo "updata $count recorders.";
+	$count=count($title_data);
+	echo "updata $count paragraph info recorders.<br>";
+	echo count($paragraph_info)." Heading<br>";
 }
+//段落信息结束
 
 
-
-	$myLogFile = fopen($dirLog."db_insert_palitext.log", "a");
+	$myLogFile = fopen(_DIR_LOG_."/db_update_palitext.log", "a");
 	fwrite($myLogFile, $log);
 	fclose($myLogFile);
+	
 ?>
 
 

+ 1 - 1
app/install/getbookname.php

@@ -23,7 +23,7 @@ if(($handle=fopen("filelist.csv",'r'))!==FALSE){
 		$FileName=$htmlFileName[1].".htm";
 		$fileId=$htmlFileName[0];
 
-		$dirLog="log/";
+		$dirLog=_DIR_LOG_."/";
 		$dirHtml="pali/";
 		$inputFileName=$dirHtml.$FileName;
 

+ 63 - 0
app/install/nav_bar.php

@@ -0,0 +1,63 @@
+<style>
+.card {
+    box-shadow: 0 0 10px rgba(0,0,0,0.15);
+    font-size: 1em;
+    line-height: 1.3;
+    margin:1em;
+    padding:1em;
+    max-width:60em;
+    margin-left:auto;
+    margin-right:auto;
+}
+.nav_card{
+    margin-left:1em;
+    margin-right:1em;
+    flex:1;
+}
+</style>
+
+<div style="display:flex;">
+
+<div class="card nav_card">
+    <h3>欢迎</h3>
+    <div class="content">
+    开始安装PCD Suite
+    </div>
+</div>
+
+<div id = "step1" class="card nav_card">
+    <h3>1.建立目录</h3>
+    <div class="content">
+   
+    </div>
+</div>
+
+<div  id = "step2" class="card nav_card">
+    <h3>2-用户数据存储库</h3>
+    <div class="content">
+    
+    </div>
+</div>
+
+<div  id = "step3" class="card nav_card">
+    <h3>3-字典数据库</h3>
+    <div class="content">
+    
+    </div>
+</div>
+
+<div  id = "step4" class="card nav_card">
+    <h3>4-语料库数据库文件</h3>
+    <div class="content">
+    
+    </div>
+</div>
+
+<div  id = "step5" class="card nav_card">
+    <h3>建立三藏语料数据库</h3>
+    <div class="content">
+    Build Pali Canon Database
+    </div>
+</div>
+
+</div>

+ 26 - 0
app/install/palicanon_db/bold.sql

@@ -0,0 +1,26 @@
+--
+-- 由SQLiteStudio v3.1.1 产生的文件 周一 8月 3 08:36:14 2020
+--
+-- 文本编码:UTF-8
+--
+PRAGMA foreign_keys = off;
+BEGIN TRANSACTION;
+
+-- 表:bold
+DROP TABLE IF EXISTS bold;
+
+CREATE TABLE bold (
+    id        INTEGER PRIMARY KEY AUTOINCREMENT,
+    book      INTEGER NOT NULL,
+    paragraph INTEGER NOT NULL,
+    word      TEXT    NOT NULL,
+    word2     TEXT    NOT NULL,
+    word_en   TEXT,
+    pali      TEXT,
+    base      TEXT
+);
+
+
+COMMIT TRANSACTION;
+VACUUM;
+PRAGMA foreign_keys = on;

+ 29 - 0
app/install/palicanon_db/bookword.sql

@@ -0,0 +1,29 @@
+--
+-- 由SQLiteStudio v3.1.1 产生的文件 周一 8月 3 08:29:56 2020
+--
+-- 文本编码:UTF-8
+--
+PRAGMA foreign_keys = off;
+BEGIN TRANSACTION;
+
+-- 表:bookword
+DROP TABLE IF EXISTS bookword;
+
+CREATE TABLE bookword (
+    book      INT,
+    wordindex INT,
+    count     INTEGER
+);
+
+
+-- 索引:
+DROP INDEX IF EXISTS "";
+
+CREATE INDEX "" ON bookword (
+    wordindex ASC
+);
+
+
+COMMIT TRANSACTION;
+VACUUM;
+PRAGMA foreign_keys = on;

+ 69 - 0
app/install/palicanon_db/index.sql

@@ -0,0 +1,69 @@
+--
+-- 由SQLiteStudio v3.1.1 产生的文件 周一 8月 3 08:37:43 2020
+--
+-- 文本编码:UTF-8
+--
+PRAGMA foreign_keys = off;
+BEGIN TRANSACTION;
+
+-- 表:word
+DROP TABLE IF EXISTS word;
+
+CREATE TABLE word (
+    id        INTEGER PRIMARY KEY AUTOINCREMENT,
+    book      INTEGER DEFAULT (0),
+    paragraph INTEGER,
+    wordindex INTEGER,
+    bold      INTEGER
+);
+
+
+-- 表:wordindex
+DROP TABLE IF EXISTS wordindex;
+
+CREATE TABLE wordindex (
+    id      INTEGER PRIMARY KEY AUTOINCREMENT,
+    word    TEXT    UNIQUE,
+    word_en TEXT,
+    count   INTEGER DEFAULT (0),
+    normal  INTEGER DEFAULT (0),
+    bold    INTEGER DEFAULT (0),
+    is_base INTEGER DEFAULT (0),
+    len     INTEGER DEFAULT (0),
+    final   INTEGER DEFAULT (0) 
+);
+
+
+-- 索引:info
+DROP INDEX IF EXISTS info;
+
+CREATE INDEX info ON wordindex (
+    word_en,
+    len,
+    final
+);
+
+
+-- 索引:pali
+DROP INDEX IF EXISTS pali;
+
+CREATE INDEX pali ON word (
+    book,
+    paragraph,
+    wordindex,
+    bold
+);
+
+
+-- 索引:wordid
+DROP INDEX IF EXISTS wordid;
+
+CREATE UNIQUE INDEX wordid ON wordindex (
+    word
+);
+
+
+COMMIT TRANSACTION;
+PRAGMA foreign_keys = on;
+
+VACUUM;

+ 28 - 0
app/install/palicanon_db/pali_sent.sql

@@ -0,0 +1,28 @@
+--
+-- 由SQLiteStudio v3.1.1 产生的文件 周一 8月 3 14:23:47 2020
+--
+-- 文本编码:UTF-8
+--
+PRAGMA foreign_keys = off;
+BEGIN TRANSACTION;
+
+-- 表:pali_sent
+DROP TABLE IF EXISTS pali_sent;
+
+CREATE TABLE pali_sent (
+    id        INTEGER PRIMARY KEY AUTOINCREMENT,
+    book      INTEGER,
+    paragraph INTEGER,
+    [begin]   INTEGER,
+    [end]     INTEGER,
+    length    INTEGER,
+    count     INTEGER,
+    text      TEXT,
+    real      TEXT,
+    real_en   TEXT
+);
+
+
+COMMIT TRANSACTION;
+VACUUM;
+PRAGMA foreign_keys = on;

+ 1810 - 0
app/install/palicanon_db/pali_text.sql

@@ -0,0 +1,1810 @@
+--
+-- 由SQLiteStudio v3.1.1 产生的文件 周一 8月 3 08:41:23 2020
+--
+-- 文本编码:UTF-8
+--
+PRAGMA foreign_keys = off;
+BEGIN TRANSACTION;
+
+-- 表:info
+DROP TABLE IF EXISTS info;
+
+CREATE TABLE info (
+    [key] TEXT PRIMARY KEY
+               NOT NULL,
+    value TEXT
+);
+
+
+-- 表:pali_text
+DROP TABLE IF EXISTS pali_text;
+
+CREATE TABLE pali_text (
+    id           INTEGER PRIMARY KEY AUTOINCREMENT
+                         NOT NULL,
+    book         INTEGER,
+    paragraph    INTEGER,
+    level        INTEGER,
+    class        TEXT,
+    toc          TEXT,
+    text         TEXT,
+    html         TEXT,
+    lenght       INTEGER,
+    album_index  INTEGER,
+    chapter_len  INTEGER,
+    next_chapter INTEGER,
+    prev_chapter INTEGER,
+    parent       INTEGER,
+    chapter_strlen       INTEGER
+);
+
+
+-- 表:pali_text_album
+DROP TABLE IF EXISTS pali_text_album;
+
+CREATE TABLE pali_text_album (
+    id           INTEGER PRIMARY KEY ASC AUTOINCREMENT,
+    guid         TEXT,
+    title        TEXT,
+    cover        TEXT,
+    language     INTEGER,
+    author       TEXT,
+    target       TEXT,
+    summary      TEXT,
+    publish_time INTEGER,
+    update_time  INTEGER,
+    edition      INTEGER,
+    edition_text TEXT,
+    type         INTEGER
+);
+
+
+-- 索引:vri
+DROP INDEX IF EXISTS vri;
+
+CREATE INDEX vri ON pali_text (
+    book,
+    paragraph ASC
+);
+
+
+-- 视图:book_name
+DROP VIEW IF EXISTS book_name;
+CREATE VIEW book_name AS
+    SELECT *
+      FROM pali_text
+     WHERE level = 1 OR 
+           class = 'book';
+
+
+-- 视图:p1
+DROP VIEW IF EXISTS p1;
+CREATE VIEW p1 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 1;
+
+
+-- 视图:p10
+DROP VIEW IF EXISTS p10;
+CREATE VIEW p10 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 10;
+
+
+-- 视图:p100
+DROP VIEW IF EXISTS p100;
+CREATE VIEW p100 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 100;
+
+
+-- 视图:p101
+DROP VIEW IF EXISTS p101;
+CREATE VIEW p101 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 101;
+
+
+-- 视图:p102
+DROP VIEW IF EXISTS p102;
+CREATE VIEW p102 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 102;
+
+
+-- 视图:p103
+DROP VIEW IF EXISTS p103;
+CREATE VIEW p103 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 103;
+
+
+-- 视图:p104
+DROP VIEW IF EXISTS p104;
+CREATE VIEW p104 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 104;
+
+
+-- 视图:p105
+DROP VIEW IF EXISTS p105;
+CREATE VIEW p105 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 105;
+
+
+-- 视图:p106
+DROP VIEW IF EXISTS p106;
+CREATE VIEW p106 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 106;
+
+
+-- 视图:p107
+DROP VIEW IF EXISTS p107;
+CREATE VIEW p107 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 107;
+
+
+-- 视图:p108
+DROP VIEW IF EXISTS p108;
+CREATE VIEW p108 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 108;
+
+
+-- 视图:p109
+DROP VIEW IF EXISTS p109;
+CREATE VIEW p109 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 109;
+
+
+-- 视图:p11
+DROP VIEW IF EXISTS p11;
+CREATE VIEW p11 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 11;
+
+
+-- 视图:p110
+DROP VIEW IF EXISTS p110;
+CREATE VIEW p110 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 110;
+
+
+-- 视图:p111
+DROP VIEW IF EXISTS p111;
+CREATE VIEW p111 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 111;
+
+
+-- 视图:p112
+DROP VIEW IF EXISTS p112;
+CREATE VIEW p112 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 112;
+
+
+-- 视图:p113
+DROP VIEW IF EXISTS p113;
+CREATE VIEW p113 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 113;
+
+
+-- 视图:p114
+DROP VIEW IF EXISTS p114;
+CREATE VIEW p114 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 114;
+
+
+-- 视图:p115
+DROP VIEW IF EXISTS p115;
+CREATE VIEW p115 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 115;
+
+
+-- 视图:p116
+DROP VIEW IF EXISTS p116;
+CREATE VIEW p116 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 116;
+
+
+-- 视图:p117
+DROP VIEW IF EXISTS p117;
+CREATE VIEW p117 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 117;
+
+
+-- 视图:p118
+DROP VIEW IF EXISTS p118;
+CREATE VIEW p118 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 118;
+
+
+-- 视图:p119
+DROP VIEW IF EXISTS p119;
+CREATE VIEW p119 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 119;
+
+
+-- 视图:p12
+DROP VIEW IF EXISTS p12;
+CREATE VIEW p12 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 12;
+
+
+-- 视图:p120
+DROP VIEW IF EXISTS p120;
+CREATE VIEW p120 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 120;
+
+
+-- 视图:p121
+DROP VIEW IF EXISTS p121;
+CREATE VIEW p121 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 121;
+
+
+-- 视图:p122
+DROP VIEW IF EXISTS p122;
+CREATE VIEW p122 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 122;
+
+
+-- 视图:p123
+DROP VIEW IF EXISTS p123;
+CREATE VIEW p123 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 123;
+
+
+-- 视图:p124
+DROP VIEW IF EXISTS p124;
+CREATE VIEW p124 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 124;
+
+
+-- 视图:p125
+DROP VIEW IF EXISTS p125;
+CREATE VIEW p125 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 125;
+
+
+-- 视图:p126
+DROP VIEW IF EXISTS p126;
+CREATE VIEW p126 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 126;
+
+
+-- 视图:p127
+DROP VIEW IF EXISTS p127;
+CREATE VIEW p127 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 127;
+
+
+-- 视图:p128
+DROP VIEW IF EXISTS p128;
+CREATE VIEW p128 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 128;
+
+
+-- 视图:p129
+DROP VIEW IF EXISTS p129;
+CREATE VIEW p129 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 129;
+
+
+-- 视图:p13
+DROP VIEW IF EXISTS p13;
+CREATE VIEW p13 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 13;
+
+
+-- 视图:p130
+DROP VIEW IF EXISTS p130;
+CREATE VIEW p130 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 130;
+
+
+-- 视图:p131
+DROP VIEW IF EXISTS p131;
+CREATE VIEW p131 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 131;
+
+
+-- 视图:p132
+DROP VIEW IF EXISTS p132;
+CREATE VIEW p132 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 132;
+
+
+-- 视图:p133
+DROP VIEW IF EXISTS p133;
+CREATE VIEW p133 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 133;
+
+
+-- 视图:p134
+DROP VIEW IF EXISTS p134;
+CREATE VIEW p134 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 134;
+
+
+-- 视图:p135
+DROP VIEW IF EXISTS p135;
+CREATE VIEW p135 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 135;
+
+
+-- 视图:p136
+DROP VIEW IF EXISTS p136;
+CREATE VIEW p136 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 136;
+
+
+-- 视图:p137
+DROP VIEW IF EXISTS p137;
+CREATE VIEW p137 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 137;
+
+
+-- 视图:p138
+DROP VIEW IF EXISTS p138;
+CREATE VIEW p138 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 138;
+
+
+-- 视图:p139
+DROP VIEW IF EXISTS p139;
+CREATE VIEW p139 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 139;
+
+
+-- 视图:p14
+DROP VIEW IF EXISTS p14;
+CREATE VIEW p14 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 14;
+
+
+-- 视图:p140
+DROP VIEW IF EXISTS p140;
+CREATE VIEW p140 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 140;
+
+
+-- 视图:p141
+DROP VIEW IF EXISTS p141;
+CREATE VIEW p141 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 141;
+
+
+-- 视图:p142
+DROP VIEW IF EXISTS p142;
+CREATE VIEW p142 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 142;
+
+
+-- 视图:p143
+DROP VIEW IF EXISTS p143;
+CREATE VIEW p143 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 143;
+
+
+-- 视图:p144
+DROP VIEW IF EXISTS p144;
+CREATE VIEW p144 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 144;
+
+
+-- 视图:p145
+DROP VIEW IF EXISTS p145;
+CREATE VIEW p145 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 145;
+
+
+-- 视图:p146
+DROP VIEW IF EXISTS p146;
+CREATE VIEW p146 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 146;
+
+
+-- 视图:p147
+DROP VIEW IF EXISTS p147;
+CREATE VIEW p147 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 147;
+
+
+-- 视图:p148
+DROP VIEW IF EXISTS p148;
+CREATE VIEW p148 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 148;
+
+
+-- 视图:p149
+DROP VIEW IF EXISTS p149;
+CREATE VIEW p149 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 149;
+
+
+-- 视图:p15
+DROP VIEW IF EXISTS p15;
+CREATE VIEW p15 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 15;
+
+
+-- 视图:p150
+DROP VIEW IF EXISTS p150;
+CREATE VIEW p150 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 150;
+
+
+-- 视图:p151
+DROP VIEW IF EXISTS p151;
+CREATE VIEW p151 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 151;
+
+
+-- 视图:p152
+DROP VIEW IF EXISTS p152;
+CREATE VIEW p152 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 152;
+
+
+-- 视图:p153
+DROP VIEW IF EXISTS p153;
+CREATE VIEW p153 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 153;
+
+
+-- 视图:p154
+DROP VIEW IF EXISTS p154;
+CREATE VIEW p154 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 154;
+
+
+-- 视图:p155
+DROP VIEW IF EXISTS p155;
+CREATE VIEW p155 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 155;
+
+
+-- 视图:p156
+DROP VIEW IF EXISTS p156;
+CREATE VIEW p156 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 156;
+
+
+-- 视图:p157
+DROP VIEW IF EXISTS p157;
+CREATE VIEW p157 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 157;
+
+
+-- 视图:p158
+DROP VIEW IF EXISTS p158;
+CREATE VIEW p158 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 158;
+
+
+-- 视图:p159
+DROP VIEW IF EXISTS p159;
+CREATE VIEW p159 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 159;
+
+
+-- 视图:p16
+DROP VIEW IF EXISTS p16;
+CREATE VIEW p16 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 16;
+
+
+-- 视图:p160
+DROP VIEW IF EXISTS p160;
+CREATE VIEW p160 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 160;
+
+
+-- 视图:p161
+DROP VIEW IF EXISTS p161;
+CREATE VIEW p161 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 161;
+
+
+-- 视图:p162
+DROP VIEW IF EXISTS p162;
+CREATE VIEW p162 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 162;
+
+
+-- 视图:p163
+DROP VIEW IF EXISTS p163;
+CREATE VIEW p163 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 163;
+
+
+-- 视图:p164
+DROP VIEW IF EXISTS p164;
+CREATE VIEW p164 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 164;
+
+
+-- 视图:p165
+DROP VIEW IF EXISTS p165;
+CREATE VIEW p165 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 165;
+
+
+-- 视图:p166
+DROP VIEW IF EXISTS p166;
+CREATE VIEW p166 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 166;
+
+
+-- 视图:p168
+DROP VIEW IF EXISTS p168;
+CREATE VIEW p168 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 168;
+
+
+-- 视图:p169
+DROP VIEW IF EXISTS p169;
+CREATE VIEW p169 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 169;
+
+
+-- 视图:p17
+DROP VIEW IF EXISTS p17;
+CREATE VIEW p17 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 17;
+
+
+-- 视图:p170
+DROP VIEW IF EXISTS p170;
+CREATE VIEW p170 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 170;
+
+
+-- 视图:p171
+DROP VIEW IF EXISTS p171;
+CREATE VIEW p171 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 171;
+
+
+-- 视图:p172
+DROP VIEW IF EXISTS p172;
+CREATE VIEW p172 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 172;
+
+
+-- 视图:p173
+DROP VIEW IF EXISTS p173;
+CREATE VIEW p173 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 173;
+
+
+-- 视图:p174
+DROP VIEW IF EXISTS p174;
+CREATE VIEW p174 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 174;
+
+
+-- 视图:p175
+DROP VIEW IF EXISTS p175;
+CREATE VIEW p175 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 175;
+
+
+-- 视图:p176
+DROP VIEW IF EXISTS p176;
+CREATE VIEW p176 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 176;
+
+
+-- 视图:p177
+DROP VIEW IF EXISTS p177;
+CREATE VIEW p177 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 177;
+
+
+-- 视图:p178
+DROP VIEW IF EXISTS p178;
+CREATE VIEW p178 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 178;
+
+
+-- 视图:p179
+DROP VIEW IF EXISTS p179;
+CREATE VIEW p179 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 179;
+
+
+-- 视图:p18
+DROP VIEW IF EXISTS p18;
+CREATE VIEW p18 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 18;
+
+
+-- 视图:p180
+DROP VIEW IF EXISTS p180;
+CREATE VIEW p180 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 180;
+
+
+-- 视图:p181
+DROP VIEW IF EXISTS p181;
+CREATE VIEW p181 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 181;
+
+
+-- 视图:p182
+DROP VIEW IF EXISTS p182;
+CREATE VIEW p182 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 182;
+
+
+-- 视图:p183
+DROP VIEW IF EXISTS p183;
+CREATE VIEW p183 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 183;
+
+
+-- 视图:p184
+DROP VIEW IF EXISTS p184;
+CREATE VIEW p184 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 184;
+
+
+-- 视图:p185
+DROP VIEW IF EXISTS p185;
+CREATE VIEW p185 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 185;
+
+
+-- 视图:p186
+DROP VIEW IF EXISTS p186;
+CREATE VIEW p186 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 186;
+
+
+-- 视图:p187
+DROP VIEW IF EXISTS p187;
+CREATE VIEW p187 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 187;
+
+
+-- 视图:p188
+DROP VIEW IF EXISTS p188;
+CREATE VIEW p188 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 188;
+
+
+-- 视图:p189
+DROP VIEW IF EXISTS p189;
+CREATE VIEW p189 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 189;
+
+
+-- 视图:p19
+DROP VIEW IF EXISTS p19;
+CREATE VIEW p19 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 19;
+
+
+-- 视图:p190
+DROP VIEW IF EXISTS p190;
+CREATE VIEW p190 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 190;
+
+
+-- 视图:p191
+DROP VIEW IF EXISTS p191;
+CREATE VIEW p191 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 191;
+
+
+-- 视图:p192
+DROP VIEW IF EXISTS p192;
+CREATE VIEW p192 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 192;
+
+
+-- 视图:p193
+DROP VIEW IF EXISTS p193;
+CREATE VIEW p193 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 193;
+
+
+-- 视图:p194
+DROP VIEW IF EXISTS p194;
+CREATE VIEW p194 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 194;
+
+
+-- 视图:p195
+DROP VIEW IF EXISTS p195;
+CREATE VIEW p195 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 195;
+
+
+-- 视图:p196
+DROP VIEW IF EXISTS p196;
+CREATE VIEW p196 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 196;
+
+
+-- 视图:p197
+DROP VIEW IF EXISTS p197;
+CREATE VIEW p197 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 197;
+
+
+-- 视图:p198
+DROP VIEW IF EXISTS p198;
+CREATE VIEW p198 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 198;
+
+
+-- 视图:p199
+DROP VIEW IF EXISTS p199;
+CREATE VIEW p199 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 199;
+
+
+-- 视图:p2
+DROP VIEW IF EXISTS p2;
+CREATE VIEW p2 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 2;
+
+
+-- 视图:p20
+DROP VIEW IF EXISTS p20;
+CREATE VIEW p20 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 20;
+
+
+-- 视图:p200
+DROP VIEW IF EXISTS p200;
+CREATE VIEW p200 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 200;
+
+
+-- 视图:p201
+DROP VIEW IF EXISTS p201;
+CREATE VIEW p201 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 201;
+
+
+-- 视图:p202
+DROP VIEW IF EXISTS p202;
+CREATE VIEW p202 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 202;
+
+
+-- 视图:p203
+DROP VIEW IF EXISTS p203;
+CREATE VIEW p203 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 203;
+
+
+-- 视图:p204
+DROP VIEW IF EXISTS p204;
+CREATE VIEW p204 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 204;
+
+
+-- 视图:p205
+DROP VIEW IF EXISTS p205;
+CREATE VIEW p205 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 205;
+
+
+-- 视图:p206
+DROP VIEW IF EXISTS p206;
+CREATE VIEW p206 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 206;
+
+
+-- 视图:p207
+DROP VIEW IF EXISTS p207;
+CREATE VIEW p207 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 207;
+
+
+-- 视图:p208
+DROP VIEW IF EXISTS p208;
+CREATE VIEW p208 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 208;
+
+
+-- 视图:p209
+DROP VIEW IF EXISTS p209;
+CREATE VIEW p209 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 209;
+
+
+-- 视图:p21
+DROP VIEW IF EXISTS p21;
+CREATE VIEW p21 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 21;
+
+
+-- 视图:p210
+DROP VIEW IF EXISTS p210;
+CREATE VIEW p210 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 210;
+
+
+-- 视图:p211
+DROP VIEW IF EXISTS p211;
+CREATE VIEW p211 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 211;
+
+
+-- 视图:p212
+DROP VIEW IF EXISTS p212;
+CREATE VIEW p212 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 212;
+
+
+-- 视图:p213
+DROP VIEW IF EXISTS p213;
+CREATE VIEW p213 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 213;
+
+
+-- 视图:p214
+DROP VIEW IF EXISTS p214;
+CREATE VIEW p214 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 214;
+
+
+-- 视图:p215
+DROP VIEW IF EXISTS p215;
+CREATE VIEW p215 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 215;
+
+
+-- 视图:p216
+DROP VIEW IF EXISTS p216;
+CREATE VIEW p216 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 216;
+
+
+-- 视图:p217
+DROP VIEW IF EXISTS p217;
+CREATE VIEW p217 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 217;
+
+
+-- 视图:p22
+DROP VIEW IF EXISTS p22;
+CREATE VIEW p22 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 22;
+
+
+-- 视图:p23
+DROP VIEW IF EXISTS p23;
+CREATE VIEW p23 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 23;
+
+
+-- 视图:p24
+DROP VIEW IF EXISTS p24;
+CREATE VIEW p24 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 24;
+
+
+-- 视图:p25
+DROP VIEW IF EXISTS p25;
+CREATE VIEW p25 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 25;
+
+
+-- 视图:p26
+DROP VIEW IF EXISTS p26;
+CREATE VIEW p26 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 26;
+
+
+-- 视图:p27
+DROP VIEW IF EXISTS p27;
+CREATE VIEW p27 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 27;
+
+
+-- 视图:p28
+DROP VIEW IF EXISTS p28;
+CREATE VIEW p28 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 28;
+
+
+-- 视图:p29
+DROP VIEW IF EXISTS p29;
+CREATE VIEW p29 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 29;
+
+
+-- 视图:p3
+DROP VIEW IF EXISTS p3;
+CREATE VIEW p3 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 3;
+
+
+-- 视图:p30
+DROP VIEW IF EXISTS p30;
+CREATE VIEW p30 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 30;
+
+
+-- 视图:p31
+DROP VIEW IF EXISTS p31;
+CREATE VIEW p31 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 31;
+
+
+-- 视图:p32
+DROP VIEW IF EXISTS p32;
+CREATE VIEW p32 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 32;
+
+
+-- 视图:p33
+DROP VIEW IF EXISTS p33;
+CREATE VIEW p33 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 33;
+
+
+-- 视图:p34
+DROP VIEW IF EXISTS p34;
+CREATE VIEW p34 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 34;
+
+
+-- 视图:p35
+DROP VIEW IF EXISTS p35;
+CREATE VIEW p35 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 35;
+
+
+-- 视图:p36
+DROP VIEW IF EXISTS p36;
+CREATE VIEW p36 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 36;
+
+
+-- 视图:p37
+DROP VIEW IF EXISTS p37;
+CREATE VIEW p37 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 37;
+
+
+-- 视图:p38
+DROP VIEW IF EXISTS p38;
+CREATE VIEW p38 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 38;
+
+
+-- 视图:p39
+DROP VIEW IF EXISTS p39;
+CREATE VIEW p39 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 39;
+
+
+-- 视图:p4
+DROP VIEW IF EXISTS p4;
+CREATE VIEW p4 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 4;
+
+
+-- 视图:p40
+DROP VIEW IF EXISTS p40;
+CREATE VIEW p40 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 40;
+
+
+-- 视图:p41
+DROP VIEW IF EXISTS p41;
+CREATE VIEW p41 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 41;
+
+
+-- 视图:p42
+DROP VIEW IF EXISTS p42;
+CREATE VIEW p42 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 42;
+
+
+-- 视图:p43
+DROP VIEW IF EXISTS p43;
+CREATE VIEW p43 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 43;
+
+
+-- 视图:p44
+DROP VIEW IF EXISTS p44;
+CREATE VIEW p44 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 44;
+
+
+-- 视图:p45
+DROP VIEW IF EXISTS p45;
+CREATE VIEW p45 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 45;
+
+
+-- 视图:p46
+DROP VIEW IF EXISTS p46;
+CREATE VIEW p46 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 46;
+
+
+-- 视图:p47
+DROP VIEW IF EXISTS p47;
+CREATE VIEW p47 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 47;
+
+
+-- 视图:p48
+DROP VIEW IF EXISTS p48;
+CREATE VIEW p48 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 48;
+
+
+-- 视图:p49
+DROP VIEW IF EXISTS p49;
+CREATE VIEW p49 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 49;
+
+
+-- 视图:p5
+DROP VIEW IF EXISTS p5;
+CREATE VIEW p5 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 5;
+
+
+-- 视图:p50
+DROP VIEW IF EXISTS p50;
+CREATE VIEW p50 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 50;
+
+
+-- 视图:p51
+DROP VIEW IF EXISTS p51;
+CREATE VIEW p51 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 51;
+
+
+-- 视图:p52
+DROP VIEW IF EXISTS p52;
+CREATE VIEW p52 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 52;
+
+
+-- 视图:p53
+DROP VIEW IF EXISTS p53;
+CREATE VIEW p53 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 53;
+
+
+-- 视图:p54
+DROP VIEW IF EXISTS p54;
+CREATE VIEW p54 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 54;
+
+
+-- 视图:p55
+DROP VIEW IF EXISTS p55;
+CREATE VIEW p55 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 55;
+
+
+-- 视图:p56
+DROP VIEW IF EXISTS p56;
+CREATE VIEW p56 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 56;
+
+
+-- 视图:p57
+DROP VIEW IF EXISTS p57;
+CREATE VIEW p57 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 57;
+
+
+-- 视图:p58
+DROP VIEW IF EXISTS p58;
+CREATE VIEW p58 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 58;
+
+
+-- 视图:p59
+DROP VIEW IF EXISTS p59;
+CREATE VIEW p59 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 59;
+
+
+-- 视图:p6
+DROP VIEW IF EXISTS p6;
+CREATE VIEW p6 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 6;
+
+
+-- 视图:p60
+DROP VIEW IF EXISTS p60;
+CREATE VIEW p60 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 60;
+
+
+-- 视图:p61
+DROP VIEW IF EXISTS p61;
+CREATE VIEW p61 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 61;
+
+
+-- 视图:p62
+DROP VIEW IF EXISTS p62;
+CREATE VIEW p62 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 62;
+
+
+-- 视图:p63
+DROP VIEW IF EXISTS p63;
+CREATE VIEW p63 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 63;
+
+
+-- 视图:p64
+DROP VIEW IF EXISTS p64;
+CREATE VIEW p64 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 64;
+
+
+-- 视图:p65
+DROP VIEW IF EXISTS p65;
+CREATE VIEW p65 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 65;
+
+
+-- 视图:p66
+DROP VIEW IF EXISTS p66;
+CREATE VIEW p66 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 66;
+
+
+-- 视图:p67
+DROP VIEW IF EXISTS p67;
+CREATE VIEW p67 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 67;
+
+
+-- 视图:p68
+DROP VIEW IF EXISTS p68;
+CREATE VIEW p68 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 68;
+
+
+-- 视图:p69
+DROP VIEW IF EXISTS p69;
+CREATE VIEW p69 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 69;
+
+
+-- 视图:p7
+DROP VIEW IF EXISTS p7;
+CREATE VIEW p7 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 7;
+
+
+-- 视图:p70
+DROP VIEW IF EXISTS p70;
+CREATE VIEW p70 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 70;
+
+
+-- 视图:p71
+DROP VIEW IF EXISTS p71;
+CREATE VIEW p71 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 71;
+
+
+-- 视图:p72
+DROP VIEW IF EXISTS p72;
+CREATE VIEW p72 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 72;
+
+
+-- 视图:p73
+DROP VIEW IF EXISTS p73;
+CREATE VIEW p73 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 73;
+
+
+-- 视图:p74
+DROP VIEW IF EXISTS p74;
+CREATE VIEW p74 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 74;
+
+
+-- 视图:p75
+DROP VIEW IF EXISTS p75;
+CREATE VIEW p75 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 75;
+
+
+-- 视图:p76
+DROP VIEW IF EXISTS p76;
+CREATE VIEW p76 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 76;
+
+
+-- 视图:p77
+DROP VIEW IF EXISTS p77;
+CREATE VIEW p77 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 77;
+
+
+-- 视图:p78
+DROP VIEW IF EXISTS p78;
+CREATE VIEW p78 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 78;
+
+
+-- 视图:p79
+DROP VIEW IF EXISTS p79;
+CREATE VIEW p79 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 79;
+
+
+-- 视图:p8
+DROP VIEW IF EXISTS p8;
+CREATE VIEW p8 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 8;
+
+
+-- 视图:p80
+DROP VIEW IF EXISTS p80;
+CREATE VIEW p80 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 80;
+
+
+-- 视图:p81
+DROP VIEW IF EXISTS p81;
+CREATE VIEW p81 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 81;
+
+
+-- 视图:p82
+DROP VIEW IF EXISTS p82;
+CREATE VIEW p82 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 82;
+
+
+-- 视图:p83
+DROP VIEW IF EXISTS p83;
+CREATE VIEW p83 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 83;
+
+
+-- 视图:p84
+DROP VIEW IF EXISTS p84;
+CREATE VIEW p84 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 84;
+
+
+-- 视图:p85
+DROP VIEW IF EXISTS p85;
+CREATE VIEW p85 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 85;
+
+
+-- 视图:p86
+DROP VIEW IF EXISTS p86;
+CREATE VIEW p86 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 86;
+
+
+-- 视图:p87
+DROP VIEW IF EXISTS p87;
+CREATE VIEW p87 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 87;
+
+
+-- 视图:p88
+DROP VIEW IF EXISTS p88;
+CREATE VIEW p88 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 88;
+
+
+-- 视图:p89
+DROP VIEW IF EXISTS p89;
+CREATE VIEW p89 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 89;
+
+
+-- 视图:p9
+DROP VIEW IF EXISTS p9;
+CREATE VIEW p9 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 9;
+
+
+-- 视图:p90
+DROP VIEW IF EXISTS p90;
+CREATE VIEW p90 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 90;
+
+
+-- 视图:p91
+DROP VIEW IF EXISTS p91;
+CREATE VIEW p91 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 91;
+
+
+-- 视图:p92
+DROP VIEW IF EXISTS p92;
+CREATE VIEW p92 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 92;
+
+
+-- 视图:p93
+DROP VIEW IF EXISTS p93;
+CREATE VIEW p93 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 93;
+
+
+-- 视图:p94
+DROP VIEW IF EXISTS p94;
+CREATE VIEW p94 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 94;
+
+
+-- 视图:p95
+DROP VIEW IF EXISTS p95;
+CREATE VIEW p95 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 95;
+
+
+-- 视图:p96
+DROP VIEW IF EXISTS p96;
+CREATE VIEW p96 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 96;
+
+
+-- 视图:p97
+DROP VIEW IF EXISTS p97;
+CREATE VIEW p97 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 97;
+
+
+-- 视图:p98
+DROP VIEW IF EXISTS p98;
+CREATE VIEW p98 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 98;
+
+
+-- 视图:p99
+DROP VIEW IF EXISTS p99;
+CREATE VIEW p99 AS
+    SELECT *
+      FROM pali_text
+     WHERE book = 99;
+
+
+COMMIT TRANSACTION;
+VACUUM;
+PRAGMA foreign_keys = on;

+ 34 - 0
app/install/palicanon_db/paliindex.sql

@@ -0,0 +1,34 @@
+--
+-- 由SQLiteStudio v3.1.1 产生的文件 周一 8月 3 08:42:26 2020
+--
+-- 文本编码:UTF-8
+--
+PRAGMA foreign_keys = off;
+BEGIN TRANSACTION;
+
+-- 表:word
+DROP TABLE IF EXISTS word;
+
+CREATE TABLE word (
+    id        INTEGER PRIMARY KEY AUTOINCREMENT,
+    book      INTEGER DEFAULT (0),
+    paragraph INTEGER,
+    wordindex INTEGER,
+    bold      INTEGER
+);
+
+
+-- 索引:pali
+DROP INDEX IF EXISTS pali;
+
+CREATE INDEX pali ON word (
+    book ASC,
+    paragraph ASC,
+    wordindex ASC,
+    bold ASC
+);
+
+
+COMMIT TRANSACTION;
+VACUUM;
+PRAGMA foreign_keys = on;

+ 36 - 0
app/install/palicanon_db/wordindex.sql

@@ -0,0 +1,36 @@
+--
+-- 由SQLiteStudio v3.1.1 产生的文件 周一 8月 3 08:34:55 2020
+--
+-- 文本编码:UTF-8
+--
+PRAGMA foreign_keys = off;
+BEGIN TRANSACTION;
+
+-- 表:wordindex
+DROP TABLE IF EXISTS wordindex;
+
+CREATE TABLE wordindex (
+    id      INT,
+    word    TEXT PRIMARY KEY ASC
+                 UNIQUE,
+    word_en TEXT,
+    count   INT,
+    normal  INT,
+    bold    INT,
+    is_base INT,
+    len     INT,
+    final   INT
+);
+
+
+-- 索引:
+DROP INDEX IF EXISTS "";
+
+CREATE INDEX "" ON wordindex (
+    word_en ASC
+);
+
+
+COMMIT TRANSACTION;
+VACUUM;
+PRAGMA foreign_keys = on;

+ 23 - 0
app/install/readme.md

@@ -0,0 +1,23 @@
+## 关于巴利语语料库的数据库生成
+
+
+
+```mermaid
+graph LR
+html --> A[xmlmaker.php]
+  A --> B(单词列表文件)
+  A -->C(单词统计表analysis)
+  A -->d(TEXT段落表pali)
+  A -->e(TEXT段落表toc)
+  A -->f(sandhi)
+  A -->g(sandhi 组分)
+  B -->|db_insert_templet.php| h{模板库}
+  B -->|db_index.php| j{单词索引}
+   e --> i
+   html --> i{巴利原文<br>pali_text}
+  j --> 总单词索引-index.db3
+  j --> 单独单词表
+  j --> 三藏单词
+  j --> 书单词索引
+  toc-手工维护 --> |升级程序|i
+```

+ 8 - 0
app/install/step1.php

@@ -5,6 +5,14 @@ require_once '../path.php';
 <head>
 </head>
 <body>
+<style>
+#step1{
+	background-color: #f1e7a4;
+}
+</style>
+<?php
+require_once 'nav_bar.php';
+?>
 <h3>Step 1 Create Dir</h3>
 <div>
 <?php

+ 8 - 0
app/install/step2.php

@@ -5,6 +5,14 @@ require_once '../path.php';
 <head>
 </head>
 <body>
+<style>
+#step2{
+	background-color: #f1e7a4;
+}
+</style>
+<?php
+require_once 'nav_bar.php';
+?>
 <h3>Step 2 Create User Database</h3>
 <?php
 $dbfile[]=array(_FILE_DB_USER_WBW_,"user_wbw.sql");

+ 9 - 1
app/install/step3.php

@@ -3,7 +3,15 @@ require_once '../pcdl/html_head.php';
 ?>
 
 <body>
-<h3>Step 2 Dictionary</h3>
+<style>
+#step3{
+	background-color: #f1e7a4;
+}
+</style>
+<?php
+require_once 'nav_bar.php';
+?>
+<h3>Step 3 Dictionary</h3>
 <div style="margin:1em;background-color:#f1e7a4;">
 生成字典数据库。约需要10分钟。您可以从网络下载已经生成好的数据库。
 <a href="https://www.dropbox.com/s/naf7sk9i9sf0dfi/appdata.7z?dl=0">drobox 7z format 754MB</a>

+ 53 - 58
app/install/step4.php

@@ -5,73 +5,68 @@ require_once '../path.php';
 <head>
 </head>
 <body>
-<h3>Step 3 Build Pali Canon Database 建立三藏语料数据库</h3>
+<style>
+#step4{
+	background-color:#f1e7a4;
+}
+</style>
+<?php
+require_once 'nav_bar.php';
+?>
+<h3>Step 4 三藏语料库</h3>
 <div style="margin:1em;background-color:#f1e7a4;">
-目前本功能尚未实现。请下载已经制作好的语料数据库放在项目文件夹中
-<a href="https://www.dropbox.com/s/naf7sk9i9sf0dfi/appdata.7z?dl=0">drobox 7z format 754MB</a>
-解压缩后放在项目目录中
-<pre>
-[project dir]
- └app
- └appdata
-   └dict
-     └3rd
-	 └system
-   └palicanon
- └user 
- </pre>
+	生成三藏语料库
 </div>
 <div>
-<h4>拆分html文件</h4>
-<a href="xmlmaker.php">拆分</a><br>
-<a href="../../log/palicanoon.log" target="_blank">view log file</a><br>
-<h4>逐词解析模板数据库</h4>
+<h4>生成数据库文件</h4>
 <?php
-if(file_exists(_DIR_PALICANON_TEMPLET_)){
-	$iCount=0;
-	for($i=1;$i<=217;$i++){
-		if(file_exists(_DIR_PALICANON_TEMPLET_."/p{$i}_tpl.db3")){
-			$iCount++;
-		}
+$dbfile[]=array(_FILE_DB_BOLD_,"bold.sql");
+$dbfile[]=array(_FILE_DB_INDEX_,"index.sql");
+$dbfile[]=array(_FILE_DB_BOOK_WORD_,"bookword.sql");
+$dbfile[]=array(_FILE_DB_PALI_INDEX_,"paliindex.sql");
+$dbfile[]=array(_FILE_DB_WORD_INDEX_,"wordindex.sql");
+$dbfile[]=array(_FILE_DB_PALI_SENTENCE_,"pali_sent.sql");
+$dbfile[]=array(_FILE_DB_PALITEXT_,"pali_text.sql");
+$dir="./palicanon_db/";
+
+if(isset($_GET["index"])){
+echo '<div style="padding:10px;margin:5px;border-bottom: 1px solid gray;background-color:yellow;">';	
+	$index = $_GET["index"];
+	$dns = "sqlite:".$dbfile[$index][0];
+	$dbh = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
+	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
+	//建立数据库
+	$_sql = file_get_contents($dir.$dbfile[$index][1]);
+	$_arr = explode(';', $_sql);
+	//执行sql语句
+	foreach ($_arr as $_value) {
+		$dbh->query($_value.';');
 	}
-	if($iCount==217){
-		echo "文件已经存在。<br>";
-		echo '<a href="db_insert_templet.php">重新生成数据库</a>';
+	echo $dns."建立数据库成功";
+echo "</div>"; 
+}
+
+
+for($i=0; $i<count($dbfile); $i++){
+	$db = $dbfile[$i];
+	echo '<div style="padding:10px;margin:5px;border-bottom: 1px solid gray;display:flex;">';
+	echo '<div style="flex:5;">'.$db[0].'</div>';
+	echo '<div style="flex:3;">';
+	if(!file_exists($db[0])){
+        echo "<span style='color:red;'>数据库不存在</span>";
+    	echo "</div>"; 
+        echo '<div style="flex:2;"><a href="step4.php?index='.$i.'">建立</a></div>';    
 	}
 	else{
-		echo "缺少".(217-$iCount)."个文件<br>";
-		echo '<a href="db_insert_templet.php">生成数据库</a>';
-	}
-	
-}
-else{
-	echo "模板数据库目录不存在<br>";
-}
-?>
-<h4>Pali句子库</h4>
-<?php
-if(file_exists(_FILE_DB_PALI_SENTENCE_)){
-	echo "Pali句子数据库已经存在<br>";
-	echo '<a href="db_insert_sentence.php">重新生成</a>';
-}
-else{
-	echo "Pali句子数据库不存在<br>";
-	echo '<a href="db_insert_sentence.php">生成</a>';
-}
-?>
-<h4>Pali原文库</h4>
-<div>
-<?php
-if(file_exists(_FILE_DB_PALITEXT_)){
-	echo "Pali原文数据库已经存在";
-	echo '<a href="db_insert_palitext.php">重新生成</a>';
-}
-else{
-	echo '<a href="db_insert_palitext.php">生成</a>';
+        echo "<span style='color:green;'>已存在</span>";
+    	echo "</div>"; 
+        echo '<div style="flex:2;"><a href="step4.php?index='.$i.'">重建</a><span style="color:red;">注意!此操作将删除原数据库中所有数据!</span></div>';
+    }
+	echo "</div>";  
 }
 ?>
-</div>
+
 <hr>
-<h2><a href="step4.php">Next</a></h2>
+<h2><a href="step5.php">Next</a></h2>
 </body>
 </html>

+ 117 - 0
app/install/step5.php

@@ -0,0 +1,117 @@
+<?php
+require_once '../path.php';
+?>
+<html>
+<head>
+</head>
+<body>
+<style>
+#step5{
+	background-color: #f1e7a4;
+}
+</style>
+<?php
+require_once 'nav_bar.php';
+?>
+<h3>Step 4 Build Pali Canon Database 建立三藏语料数据库</h3>
+
+<div class="card" style="background-color:#f1e7a4;">
+目前本功能尚未实现。请下载已经制作好的语料数据库放在项目文件夹中
+<a href="https://www.dropbox.com/s/naf7sk9i9sf0dfi/appdata.7z?dl=0">drobox 7z format 754MB</a>
+解压缩后放在项目目录中
+<pre>
+[project dir]
+ └app
+ └appdata
+   └dict
+     └3rd
+	 └system
+   └palicanon
+ └user 
+ </pre>
+</div>
+
+
+<div class="card">
+<h4>拆分html文件</h4>
+<a href="xmlmaker.php">拆分</a><br>
+<a href="../../log/palicanoon.log" target="_blank">view log file</a>
+</div>
+
+<div class="card">
+<h4>逐词解析模板数据库</h4>
+<?php
+if(file_exists(_DIR_PALICANON_TEMPLET_)){
+	$iCount=0;
+	for($i=1;$i<=217;$i++){
+		if(file_exists(_DIR_PALICANON_TEMPLET_."/p{$i}_tpl.db3")){
+			$iCount++;
+		}
+	}
+	if($iCount==217){
+		echo "文件已经存在。<br>";
+		echo '<a href="db_insert_templet.php">重新生成数据库</a>';
+	}
+	else{
+		echo "缺少".(217-$iCount)."个文件<br>";
+		echo '<a href="db_insert_templet.php">生成数据库</a>';
+	}
+	
+}
+else{
+	echo "模板数据库目录不存在<br>";
+}
+?>
+</div>
+
+<div class="card">
+	<h4>单词索引表</h4>
+	<div class="contence">
+	<a href="db_insert_index.php" target="_blank">生成-一本书一次写入</a><br>
+	<a href="db_insert_index_once.php" target="_blank">一次生成所有的书</a>
+	</div>
+</div>
+
+<div class="card">
+	<h4>黑体字数据库</h4>
+	<div class="contence">
+	<a href="db_insert_bold.php" target="_blank">生成</a>
+	</div>
+</div>
+
+<div class="card">
+<h4>Pali句子库</h4>
+<?php
+if(file_exists(_FILE_DB_PALI_SENTENCE_)){
+	echo "Pali句子数据库已经存在<br>";
+	echo '<a href="db_insert_sentence.php">重新生成</a>';
+}
+else{
+	echo "Pali句子数据库不存在<br>";
+	echo '<a href="db_insert_sentence.php">生成</a>';
+}
+?>
+</div>
+
+<div class="card">
+<h4>Pali原文库</h4>
+<div>
+<?php
+if(file_exists(_FILE_DB_PALITEXT_)){
+	echo "Pali原文数据库已经存在<br>";
+	echo '<a href="db_insert_palitext.php" target="_blank">重新生成</a><br>';
+	echo '<a href="db_update_palitext.php" target="_blank">更新</a><br>';
+}
+else{
+	echo '<a href="db_insert_palitext.php">生成</a><br>';
+}
+echo "<a href = '"._DIR_LOG_."/db_update_palitext.log"."' target='_blank'>view Log</a>"
+?>
+</div>
+</div>
+
+
+<hr>
+<h2><a href="step4.php">Next</a></h2>
+</body>
+</html>

+ 19 - 6
app/install/xmlmaker.php

@@ -60,7 +60,7 @@ $g_wordCounter=0;
 $arrUnWords[0]=array("id","word","type","gramma","parent","mean","note","part","partmean","cf","state","delete","tag","len");
 $g_unWordCounter=0;
 
-$arrToc[0]=array("id","book","par_num","level","class","language","title","author","editor","revision","edition","sub_ver");
+$arrToc[0]=array("id","book","par_num","level","class","title","text");
 $g_TocCounter=0;
 
 $arrUnPart[0]="word";
@@ -401,7 +401,7 @@ foreach ($values as $child)
 					$vriParNum++;
 					$wordOrder=1;
 					$g_TocCounter++;
-					$arrToc[$g_TocCounter]=array('NULL',$bookId,$vriParNum,"0",$class,"pali","","PCDS","PCDS","","1","0");					
+					$arrToc[$g_TocCounter]=array('NULL',$bookId,$vriParNum,"0",$class,"","");					
 					splitWords(getChildNodeValue($child,"value"));
 					$parBegin=true;
 					break;
@@ -415,7 +415,7 @@ foreach ($values as $child)
 					$wordOrder=1;
 					$parText=getChildNodeValue($child,"value");	
 					$g_TocCounter++;
-					$arrToc[$g_TocCounter]=array('NULL',$bookId,$vriParNum,"0",$class,"pali","","PCDS","PCDS","","1","0");
+					$arrToc[$g_TocCounter]=array('NULL',$bookId,$vriParNum,"0",$class,"","");
 					splitWords($parText);
 					$parBegin=false;
 					break;
@@ -498,8 +498,9 @@ foreach ($values as $child)
 
 //Toc
 $counter=0;
-//$fpCombinToc=fopen($dirDbBase."combin_toc.csv", "a");
-
+if(($fptitle=fopen($dirXmlBase.$dirXml."/".($from+1)."_title.csv", "w")) === FALSE){
+	echo "error: can not open output file toc .";
+}
 if(($fp=fopen($dirXmlBase.$dirXml.$outputFileNameHead."_toc.csv", "w"))!==FALSE){
 	$fpPaliText=fopen($dirXmlBase.$dirXml.$outputFileNameHead."_pali.csv", "w");
 	foreach($arrToc as $xWord){
@@ -507,31 +508,42 @@ if(($fp=fopen($dirXmlBase.$dirXml.$outputFileNameHead."_toc.csv", "w"))!==FALSE)
 		switch($xWord[4]){
 			case "book":
 				$xWord[3]=1;
+				$xPali[3] = 1;
 				break;
 			case "chapter":
 				$xWord[3]=2;
+				$xPali[3] = 2;
 				break;
 			case "title":
 				$xWord[3]=3;
+				$xPali[3] = 3;
 				break;
 			case "subhead":
 				$xWord[3]=4;
+				$xPali[3] = 4;
 				break;
 			case "subsubhead":
 				$xWord[3]=5;
+				$xPali[3] = 5;
 				break;
 			case "hangnum":
 				$xWord[3]=8;
+				$xPali[3] = 8;
 				break;
 			default:
-				$xWord[3]=0;
+				$xWord[3]=100;
+				$xPali[3] = 100;
 				break;
 		}
 		
+		if($xWord[3] < 100){
+			$xWord[5] = $xWord[6];
+		}
 		
 		
 		fputcsv($fpPaliText,$xPali);
 		fputcsv($fp,$xWord);
+		fputcsv($fptitle,$xWord);
 		if($counter>0){
 			//fputcsv($fpCombinToc,$xWord);
 		}
@@ -540,6 +552,7 @@ if(($fp=fopen($dirXmlBase.$dirXml.$outputFileNameHead."_toc.csv", "w"))!==FALSE)
 	}
 	fclose($fpPaliText);
 	fclose($fp);
+	fclose($fptitle);
 	//fclose($fpCombinToc);
 	echo "TOC 表导出到:".$dirXmlBase.$dirXml.$outputFileNameHead."_toc.csv<br>";
 }

+ 4 - 7
app/path.php

@@ -26,16 +26,13 @@ define("_DIR_USER_BASE_" , __DIR__."/../user");
 define("_DIR_USER_IMG_" , "../../user/media/3");
 define("_DIR_MYDOCUMENT_" , "/my_document");
 
-
-define("_DIR_PALI_HTML_" , __DIR__."/../palihtml");
 define("_DIR_FONT_" , __DIR__."/../font");
-
+define("_DIR_PALI_HTML_" , __DIR__."/../palihtml");
 define("_DIR_DICT_TEXT_" , __DIR__."/../dicttext");
 define("_DIR_PALI_CSV_" , __DIR__."/../palicsv");
 define("_DIR_LOG_" , __DIR__."/../log");
 define("_DIR_TEMP_" , __DIR__."/../temp");
-
-
+define("_DIR_PALI_TITLE_" , __DIR__."/../pali_title");
 define("_DIR_APP_" , __DIR__."/../app");
 define("_DIR_LANGUAGE_" , __DIR__."/../app/public/lang");
 define("_DIR_BOOK_INDEX_" , __DIR__."/../app/public/book_index");
@@ -46,11 +43,11 @@ define("_FILE_DB_RES_INDEX_"  , __DIR__."/../appdata/palicanon/res.db3");
 define("_FILE_DB_PALITEXT_" , __DIR__."/../appdata/palicanon/pali_text.db3");
 define("_FILE_DB_STATISTICS_" , __DIR__."/../appdata/palicanon/word_statistics.db3");
 define("_FILE_DB_PALI_SENTENCE_" , __DIR__."/../appdata/palicanon/pali_sent.db3");
-define("_FILE_DB_word_INDEX_"  , __DIR__."/../appdata/palicanon/wordindex.db3");
 define("_FILE_DB_INDEX_"  , __DIR__."/../appdata/palicanon/index.db3");
+define("_FILE_DB_WORD_INDEX_"  , __DIR__."/../appdata/palicanon/wordindex.db3");
 define("_FILE_DB_PALI_INDEX_"  , __DIR__."/../appdata/palicanon/paliindex.db3");
 define("_FILE_DB_BOOK_WORD_"  , __DIR__."/../appdata/palicanon/bookword.db3");
-define("_FILE_DB_bold_"  , __DIR__."/../appdata/palicanon/bold.db3");
+define("_FILE_DB_BOLD_"  , __DIR__."/../appdata/palicanon/bold.db3");
 
 /*user data*/
 define("_FILE_DB_USER_WBW_" , __DIR__."/../user/user_wbw.db3");

+ 1 - 0
app/public/lang/default.json

@@ -421,6 +421,7 @@
 		"studio": "Studio",
 		"library": "Library",
 		"turbo_split": "Turbo Split",
+		"full_text": "full text",
 		"": ""
 	},
 	"grammastr": [

+ 1 - 0
app/public/lang/en.json

@@ -421,6 +421,7 @@
 		"studio": "Studio",
 		"library": "Library",
 		"turbo_split": "Turbo Split",
+		"full_text": "full text",
 		"": ""
 	},
 	"grammastr": [

+ 1 - 0
app/public/lang/my.json

@@ -421,6 +421,7 @@
 		"studio": "Studio",
 		"library": "Library",
 		"turbo_split": "Turbo Split",
+		"full_text": "full text",
 		"": ""
 	},
 	"grammastr": [

+ 1 - 0
app/public/lang/si.json

@@ -426,6 +426,7 @@
 		"studio": "Studio",
 		"library": "Library",
 		"turbo_split": "Turbo Split",
+		"full_text": "full text",
 		"": ""
 	},
 	"grammastr": [

+ 5 - 0
app/public/lang/zh-cn.json

@@ -422,6 +422,11 @@
 		"studio": "译经楼",
 		"library": "藏经阁",
 		"turbo_split": "強力拆分",
+		"full_text": "全文",
+		"": "",
+		"": "",
+		"": "",
+		"": "",
 		"": ""
 	},
 	"grammastr": [

+ 1 - 0
app/public/lang/zh-tw.json

@@ -422,6 +422,7 @@
 		"studio": "譯經樓",
 		"library": "藏經閣",
 		"turbo_split": "強力拆分",
+		"full_text": "全文",
 		"": ""
 	},
 	"grammastr": [

+ 2 - 2
app/search/bold_search.php

@@ -83,7 +83,7 @@ switch($op){
 			$strQueryWord="('{$word}')";
 		}
 
-		$dictFileName=_FILE_DB_bold_;
+		$dictFileName=_FILE_DB_BOLD_;
 		PDO_Connect("sqlite:$dictFileName");
 		//查询符合的记录数
 		$query = "select count(*) as co from bold where \"word2\" in  $strQueryWord";
@@ -270,7 +270,7 @@ switch($op){
 		switch($target){
 			case "bold";
 				$arrBookName=json_decode(file_get_contents("../public/book_name/sc.json"));
-				$dictFileName=_FILE_DB_bold_;
+				$dictFileName=_FILE_DB_BOLD_;
 				PDO_Connect("sqlite:$dictFileName");
 				$wordlist=$_GET["wordlist"];
 				$booklist=$_GET["booklist"];

+ 2 - 2
app/search/dict_find3.php

@@ -36,7 +36,7 @@ global $PDO;
 
 switch($op){
 	case "pre"://预查询
-		$dictFileName=_FILE_DB_word_INDEX_;
+		$dictFileName=_FILE_DB_WORD_INDEX_;
 		PDO_Connect("sqlite:$dictFileName");
 		echo "<div>";
 		$query = "select word,count from wordindex where \"word_en\" like ".$PDO->quote($word.'%')." OR \"word\" like ".$PDO->quote($word.'%')." limit 0,50";
@@ -111,7 +111,7 @@ switch($op){
 		/*查找实际出现的拼写
 
 		*/
-		$dictFileName=_FILE_DB_word_INDEX_;
+		$dictFileName=_FILE_DB_WORD_INDEX_;
 		PDO_Connect("sqlite:$dictFileName");
 		$query = "select id,word,count from wordindex where \"word\" in  $strQueryWord";
 		$arrRealWordList = PDO_FetchAll($query);

+ 1 - 1
app/search/paliword_search.php

@@ -32,7 +32,7 @@ switch($op){
 		$time_start = microtime_float();
 		
 		$searching=$arrWordList[count($arrWordList)-1];
-		$dbfile = _FILE_DB_word_INDEX_;
+		$dbfile = _FILE_DB_WORD_INDEX_;
 		echo $dbfile;
 		PDO_Connect("sqlite:".$dbfile);
 		

+ 2 - 2
app/search/search.php

@@ -122,7 +122,7 @@ switch($op){
 		$time_start = microtime_float();
 		
 		$searching=$arrWordList[count($arrWordList)-1];
-		$dictFileName=_FILE_DB_word_INDEX_;
+		$dictFileName=_FILE_DB_WORD_INDEX_;
 		PDO_Connect("sqlite:$dictFileName");
 		
 		if(count($arrWordList)>1){
@@ -217,7 +217,7 @@ switch($op){
 		//查找实际出现的拼写
 
 		$time_start = microtime_float();
-		$dictFileName=_FILE_DB_word_INDEX_;
+		$dictFileName=_FILE_DB_WORD_INDEX_;
 		PDO_Connect("sqlite:$dictFileName");
 		$query = "select id,word,count from wordindex where \"word\" in  $strQueryWord";
 		$arrRealWordList = PDO_FetchAll($query);

+ 4 - 4
app/search/toobar.php

@@ -26,7 +26,7 @@
 	<div id='search_toolbar' class="search_toolbar">
 			<div style="display:flex;">
 				<span >
-					搜索
+					<?php echo $_local->gui->search;?>
 				</span>
 				<div>
 					<div>
@@ -54,9 +54,9 @@
 					$key = "";
 				}
 				?>
-					<li id="dt_all" ><a href="../search/index.php<?php echo $key;?>"><span >全部</span><span id="search_all_num"></span></a></li>
-					<li id="dt_title" ><a href="../search/title.php<?php echo $key;?>"><span >标题</span><span id="search_title_num"></span></a></li>
-					<li id="dt_pali" ><a href="../search/paliword.php<?php echo $key;?>"><span >巴利原文</span><span id="search_palitext_num"></span></a></li>
+					<li id="dt_all" ><a href="../search/index.php<?php echo $key;?>"><span ><?php echo $_local->gui->all;//全部?></span><span id="search_all_num"></span></a></li>
+					<li id="dt_title" ><a href="../search/title.php<?php echo $key;?>"><span ><?php echo $_local->gui->title;//标题?></span><span id="search_title_num"></span></a></li>
+					<li id="dt_pali" ><a href="../search/paliword.php<?php echo $key;?>"><span ><?php echo $_local->gui->full_text;//巴利原文?></span><span id="search_palitext_num"></span></a></li>
 					<li id="dt_bold" ><a href="../search/bold.php<?php echo $key;?>"><span ><?php echo $_local->gui->vannana;?></span><span id="search_bold_num"></span></a></li>
 					<li id="dt_trans" ><a href="../search/trans.php<?php echo $key;?>"><span ><?php echo $_local->gui->translate;?></span><span id="search_trans_num"></span></a></li>
 				</ul>

+ 1 - 1
app/search/word_function.php

@@ -140,7 +140,7 @@ function countWordInPali($word,$sort=false){
 
 		//查找实际出现的拼写
 
-        $dsn = "sqlite:"._FILE_DB_word_INDEX_;
+        $dsn = "sqlite:"._FILE_DB_WORD_INDEX_;
         $user = "";
         $password = "";
         $PDO = new PDO($dsn, $user, $password,array(PDO::ATTR_PERSISTENT=>true));

+ 0 - 0
app/studio/_FILE_DB_MESSAGE_


+ 16 - 0
dashboard/.editorconfig

@@ -0,0 +1,16 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[Makefile]
+indent_style = tab

+ 9 - 0
dashboard/.gitignore

@@ -0,0 +1,9 @@
+# dependencies
+/node_modules/
+/yarn.lock
+
+# production
+/dist/
+
+# umi
+/src/.umi

+ 8 - 0
dashboard/.prettierignore

@@ -0,0 +1,8 @@
+**/*.md
+**/*.svg
+**/*.ejs
+**/*.html
+package.json
+.umi
+.umi-production
+.umi-test

+ 11 - 0
dashboard/.prettierrc

@@ -0,0 +1,11 @@
+{
+  "singleQuote": true,
+  "trailingComma": "all",
+  "printWidth": 80,
+  "overrides": [
+    {
+      "files": ".prettierrc",
+      "options": { "parser": "json" }
+    }
+  ]
+}

+ 10 - 0
dashboard/.umirc.ts

@@ -0,0 +1,10 @@
+import { defineConfig } from 'umi';
+
+export default defineConfig({
+  nodeModulesTransform: {
+    type: 'none',
+  },
+  routes: [
+    { path: '/', component: '@/pages/index' },
+  ],
+});

+ 0 - 0
dashboard/mock/.gitkeep


+ 32 - 0
dashboard/package.json

@@ -0,0 +1,32 @@
+{
+  "private": true,
+  "scripts": {
+    "start": "umi dev",
+    "build": "umi build",
+    "postinstall": "umi generate tmp",
+    "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
+    "test": "umi-test",
+    "test:coverage": "umi-test --coverage"
+  },
+  "gitHooks": {
+    "pre-commit": "lint-staged"
+  },
+  "lint-staged": {
+    "*.{js,jsx,less,md,json}": [
+      "prettier --write"
+    ],
+    "*.ts?(x)": [
+      "prettier --parser=typescript --write"
+    ]
+  },
+  "dependencies": {
+    "@umijs/preset-react": "1.x",
+    "@umijs/test": "^3.2.3",
+    "lint-staged": "^10.0.7",
+    "prettier": "^1.19.1",
+    "react": "^16.12.0",
+    "react-dom": "^16.12.0",
+    "umi": "^3.2.3",
+    "yorkie": "^2.0.0"
+  }
+}

+ 7 - 0
dashboard/src/pages/index.less

@@ -0,0 +1,7 @@
+
+.normal {
+}
+
+.title {
+  background: rgb(121, 242, 157);
+}

+ 10 - 0
dashboard/src/pages/index.tsx

@@ -0,0 +1,10 @@
+import React from 'react';
+import styles from './index.less';
+
+export default () => {
+  return (
+    <div>
+      <h1 className={styles.title}>Page index</h1>
+    </div>
+  );
+}

+ 25 - 0
dashboard/tsconfig.json

@@ -0,0 +1,25 @@
+{
+  "compilerOptions": {
+    "target": "esnext",
+    "module": "esnext",
+    "moduleResolution": "node",
+    "importHelpers": true,
+    "jsx": "react",
+    "esModuleInterop": true,
+    "sourceMap": true,
+    "baseUrl": "./",
+    "strict": true,
+    "paths": {
+      "@/*": ["src/*"],
+      "@@/*": ["src/.umi/*"]
+    },
+    "allowSyntheticDefaultImports": true
+  },
+  "include": [
+    "mock/**/*",
+    "src/**/*",
+    "config/**/*",
+    ".umirc.ts",
+    "typings.d.ts"
+  ]
+}

+ 8 - 0
dashboard/typings.d.ts

@@ -0,0 +1,8 @@
+declare module '*.css';
+declare module '*.less';
+declare module "*.png";
+declare module '*.svg' {
+  export function ReactComponent(props: React.SVGProps<SVGSVGElement>): React.ReactElement
+  const url: string
+  export default url
+}

+ 6 - 2
documents/users_guide/en/comp_split.md

@@ -1,3 +1,7 @@
-# 强大的复合词拆分
+## Turbo Split for Samāsa
 
-这是基于语料库的复合词自动拆分程序。程序会进行深度切分和搜索,给出可能性比较高的一些可能。点击组分后面的数字选择其他的可能。
+long spelling pāḷi samāsa(compound word) can be easily splited by clicking this botton.
+
+1. basing on AI tech, we calculate the **possibility** and show the highest one.
+2. The **number** followed the factors can be clicked to show the possible list.
+3. User can click **each factor** to look up the dictionary. 

+ 10 - 0
documents/users_guide/en/dict_search_input.md

@@ -1,5 +1,15 @@
 ## Smart Dictionary
 
+
+输入框中支持用**加号**分隔单词中各个组成部分。
+- 如:输入citta+kamma
+
+点击搜索框下方的**组分**查询每个组分的意思。
+
+点击左侧的词典列表中的**词典名称**,可以进行词条跳转。
+
+词典列表下方的**拼写列表**中,穷举了一切存在的**变化形式**以及在语料库中的出现频率。
+
 You can put the plus(+)between parts in the compone word, and than click one part(under the search input) lookup dictionary.
 
 ### Example:

+ 5 - 2
documents/users_guide/zh-cn/comp_split.md

@@ -1,3 +1,6 @@
-# 强大的复合词拆分
+## 复合词强力拆分
 
-这是基于语料库的复合词自动拆分程序。程序会进行深度切分和搜索,给出可能性比较高的一些可能。点击组分后面的数字选择其他的可能。
+点击此按钮可以拆分长复合词
+1. 基于AI算法,我们给出**可能性**最高的拆分结果。
+2. 点击拆分结果后面的**数字**可以显示可能的拆分列表。
+3. 用户可以通过点击**每个组分**来进行字典查询。

+ 8 - 4
documents/users_guide/zh-cn/dict_search_input.md

@@ -1,6 +1,10 @@
-## 聪明的单词搜索
+## 智能词典
 
-您可以在输入框中的复合词中加入加号(+)用以分隔单词的各个组成部分。利用搜索框下方的组分列表查询组分的意思。
+输入框中支持用**加号**分隔单词中各个组成部分。
+- 如:输入citta+kamma
 
-### 例如:
-citta+kamma
+点击搜索框下方的**组分**查询每个组分的意思。
+
+点击左侧的词典列表中的**词典名称**,可以进行词条跳转。
+
+词典列表下方的**拼写列表**中,穷举了一切存在的**变化形式**以及在语料库中的出现频率。

+ 5 - 2
documents/users_guide/zh-tw/comp_split.md

@@ -1,3 +1,6 @@
-# 强大的复合词拆分
+## 複合詞強力拆分
 
-这是基于语料库的复合词自动拆分程序。程序会进行深度切分和搜索,给出可能性比较高的一些可能。点击组分后面的数字选择其他的可能。
+點選此按鈕可以拆分長複合詞
+1. 基於AI演算法,我們給出**可能性**最高的拆分結果。
+2. 點選拆分結果後面的**數字**可以顯示可能的拆分列表。
+3. 使用者可以通過點選**每個組分**來進行字典查詢。

TEMPAT SAMPAH
font/NotoSans/NotoSans-Black.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-BlackItalic.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-Bold.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-BoldItalic.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-ExtraBold.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-ExtraBoldItalic.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-ExtraLight.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-ExtraLightItalic.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-Italic.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-Light.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-LightItalic.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-Medium.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-MediumItalic.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-Regular.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-SemiBold.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-SemiBoldItalic.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-Thin.ttf


TEMPAT SAMPAH
font/NotoSans/NotoSans-ThinItalic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-Black.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-BlackItalic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-Bold.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-BoldItalic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-ExtraBold.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-ExtraBoldItalic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-ExtraLight.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-ExtraLightItalic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-Italic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-Light.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-LightItalic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-Medium.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-MediumItalic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-Regular.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-SemiBold.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-SemiBoldItalic.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-Thin.ttf


TEMPAT SAMPAH
font/NotoSerif/NotoSerif-ThinItalic.ttf


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini