| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?php
- require_once __DIR__ . '/casesuf.inc';
- require_once __DIR__ . '/config.php';
- require_once __DIR__ . '/../path.php';
- $_book_index = null; //书的列表
- /*
- $mode:
- 0
- */
- function getPaliWordBase($word, $mode = 0)
- {
- global $case;
- //去除尾查
- $newWord = array();
- for ($row = 0; $row < count($case); $row++) {
- $len = mb_strlen($case[$row][1], "UTF-8");
- $end = mb_substr($word, 0 - $len, null, "UTF-8");
- if ($end == $case[$row][1]) {
- $base = mb_substr($word, 0, mb_strlen($word, "UTF-8") - $len, "UTF-8") . $case[$row][0];
- if ($base != $word) {
- $type = ".n.";
- $gramma = $case[$row][2];
- $parts = "{$base}+{$case[$row][1]}";
- if (isset($newWord[$base])) {
- array_push($newWord[$base], array("type" => $type,
- "gramma" => $gramma,
- "parts" => $parts,
- ));
- } else {
- $newWord[$base] = array(array("type" => $type,
- "gramma" => $gramma,
- "parts" => $parts,
- ));
- }
- }
- }
- }
- return ($newWord);
- }
- function _load_book_index()
- {
- global $_book_index, $_dir_lang, $currLanguage, $_dir_book_index;
- if (file_exists($_dir_lang . $currLanguage . ".json")) {
- $_book_index = json_decode(file_get_contents($_dir_book_index . "a/" . $currLanguage . ".json"));
- } else {
- $_book_index = json_decode(file_get_contents($_dir_book_index . "a/default.json"));
- }
- //print_r($_book_index);
- }
- function _get_book_info($index)
- {
- global $_book_index;
- foreach ($_book_index as $book) {
- if ($book->row == $index) {
- return ($book);
- }
- }
- return (null);
- }
- function _get_book_path($index)
- {
- global $_book_index;
- }
- function _get_para_path($book, $paragraph)
- {
- $dns = "" . _FILE_DB_PALITEXT_;
- $dbh = new PDO($dns, "", "", array(PDO::ATTR_PERSISTENT => true));
- $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
- $path = "";
- $parent = $paragraph;
- $deep = 0;
- $sFirstParentTitle = "";
- //循环查找父标题 得到整条路径
- while ($parent > -1) {
- $query = "select * from pali_text where \"book\" = ? and \"paragraph\" = ? limit 0,1";
- $stmt = $dbh->prepare($query);
- $stmt->execute(array($book, $parent));
- $FetParent = $stmt->fetch(PDO::FETCH_ASSOC);
- $toc = "<chapter book='{$book}' para='{$parent}' title='{$FetParent["toc"]}'>{$FetParent["toc"]}</chapter>";
- if ($path == "") {
- if ($FetParent["level"] < 100) {
- $path = $toc;
- } else {
- $path = "<para book='{$book}' para='{$parent}' title='{$FetParent["toc"]}'>{$paragraph}</para>";
- }
- } else {
- $path = $toc . $path;
- }
- if ($sFirstParentTitle == "") {
- $sFirstParentTitle = $FetParent["toc"];
- }
- $parent = $FetParent["parent"];
- $deep++;
- if ($deep > 5) {
- break;
- }
- }
- $dbh = null;
- return ($path);
- }
- class UUID
- {
- public static function v3($namespace, $name)
- {
- if (!self::is_valid($namespace)) {
- return false;
- }
- // Get hexadecimal components of namespace
- $nhex = str_replace(array('-', '{', '}'), '', $namespace);
- // Binary Value
- $nstr = '';
- // Convert Namespace UUID to bits
- for ($i = 0; $i < strlen($nhex); $i += 2) {
- $nstr .= chr(hexdec($nhex[$i] . $nhex[$i + 1]));
- }
- // Calculate hash value
- $hash = md5($nstr . $name);
- return sprintf('%08s-%04s-%04x-%04x-%12s',
- // 32 bits for "time_low"
- substr($hash, 0, 8),
- // 16 bits for "time_mid"
- substr($hash, 8, 4),
- // 16 bits for "time_hi_and_version",
- // four most significant bits holds version number 3
- (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000,
- // 16 bits, 8 bits for "clk_seq_hi_res",
- // 8 bits for "clk_seq_low",
- // two most significant bits holds zero and one for variant DCE1.1
- (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
- // 48 bits for "node"
- substr($hash, 20, 12)
- );
- }
- public static function v4()
- {
- return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
- // 32 bits for "time_low"
- mt_rand(0, 0xffff), mt_rand(0, 0xffff),
- // 16 bits for "time_mid"
- mt_rand(0, 0xffff),
- // 16 bits for "time_hi_and_version",
- // four most significant bits holds version number 4
- mt_rand(0, 0x0fff) | 0x4000,
- // 16 bits, 8 bits for "clk_seq_hi_res",
- // 8 bits for "clk_seq_low",
- // two most significant bits holds zero and one for variant DCE1.1
- mt_rand(0, 0x3fff) | 0x8000,
- // 48 bits for "node"
- mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
- );
- }
- public static function v5($namespace, $name)
- {
- if (!self::is_valid($namespace)) {
- return false;
- }
- // Get hexadecimal components of namespace
- $nhex = str_replace(array('-', '{', '}'), '', $namespace);
- // Binary Value
- $nstr = '';
- // Convert Namespace UUID to bits
- for ($i = 0; $i < strlen($nhex); $i += 2) {
- $nstr .= chr(hexdec($nhex[$i] . $nhex[$i + 1]));
- }
- // Calculate hash value
- $hash = sha1($nstr . $name);
- return sprintf('%08s-%04s-%04x-%04x-%12s',
- // 32 bits for "time_low"
- substr($hash, 0, 8),
- // 16 bits for "time_mid"
- substr($hash, 8, 4),
- // 16 bits for "time_hi_and_version",
- // four most significant bits holds version number 5
- (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x5000,
- // 16 bits, 8 bits for "clk_seq_hi_res",
- // 8 bits for "clk_seq_low",
- // two most significant bits holds zero and one for variant DCE1.1
- (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
- // 48 bits for "node"
- substr($hash, 20, 12)
- );
- }
- public static function is_valid($uuid)
- {
- return preg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?' .
- '[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i', $uuid) === 1;
- }
- }
- function pali2english($subject)
- {
- $subject = mb_strtolower($subject, 'UTF-8');
- $search = array('ā', 'ī', 'ū', 'ṅ', 'ñ', 'ṇ', 'ṭ', 'ḍ', 'ḷ', 'ṃ');
- $replace = array('a', 'i', 'u', 'n', 'n', 'n', 't', 'd', 'l', 'm');
- $title_en = str_replace($search, $replace, $subject);
- return ($title_en);
- }
- function mTime()
- {
- return (sprintf("%d", microtime(true) * 1000));
- }
- function getLanguageCode($inString)
- {
- return ("zh-cn");
- }
|