Initial commit.
This commit is contained in:
99
lib/php/monica/big5.inc.php
Normal file
99
lib/php/monica/big5.inc.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
// File name: big5.inc.php
|
||||
// Description: PHP subroutine to deal with Big5 characters
|
||||
// Date: 2004-04-17
|
||||
// Author: imacat <imacat@pristine.com.tw>
|
||||
// Copyright: Copyright (C) 2004-2007 Pristine Communications
|
||||
|
||||
// 編碼規則:
|
||||
// 高位元組: A1-FE, 8E-A0, 81-8D
|
||||
// 低位元組: 40-7E, A1-FE
|
||||
// 常用字: A440-C67E
|
||||
// 次常用字: C940-F9D5
|
||||
// 常用符號: A140-A3BF
|
||||
// 罕用符號: C6A1-C8FE
|
||||
// 控制碼: A3C0-A3E0
|
||||
|
||||
// Set the include path
|
||||
if (!defined("INCPATH_SET")) {
|
||||
require_once dirname(__FILE__) . "/incpath.inc.php";
|
||||
}
|
||||
// Referenced subroutines
|
||||
require_once "monica/xfileio.inc.php";
|
||||
|
||||
// Settings
|
||||
define("_BIG5_VAR", "/tmp/big5.var");
|
||||
$_BIG5 = null;
|
||||
|
||||
// init_big5: Initialize the Big5 characters array
|
||||
function init_big5()
|
||||
{
|
||||
global $_BIG5;
|
||||
// Already initialized
|
||||
if (!is_null($_BIG5)) {
|
||||
return;
|
||||
}
|
||||
// Initialize from the existing table
|
||||
if (file_exists(_BIG5_VAR)) {
|
||||
eval(xfread(_BIG5_VAR));
|
||||
return;
|
||||
}
|
||||
// Initialize the characters
|
||||
$_BIG5 = array(
|
||||
"常用字" => _big5_gen_chars(0xA440, 0xC67E),
|
||||
"次常用字" => _big5_gen_chars(0xC940, 0xF9D5),
|
||||
"常用符號" => _big5_gen_chars(0xA140, 0xA3BF),
|
||||
//"罕用符號" => _big5_gen_chars(0xC6A1, 0xC8FE),
|
||||
//"控制碼" => _big5_gen_chars(0xA3C0, 0xA3E0),
|
||||
);
|
||||
|
||||
// Save the result
|
||||
$string = "\$_BIG5 = " . var_export($_BIG5, true) . ";\n";
|
||||
xfupdate(_BIG5_VAR, $string);
|
||||
return;
|
||||
}
|
||||
|
||||
// _big5_gen_chars: Generate a range of Big5 characters
|
||||
function _big5_gen_chars($start, $end)
|
||||
{
|
||||
$chars = array();
|
||||
for ($code = $start; $code <= $end; ) {
|
||||
$chars[] = pack("n", $code);
|
||||
# Next character
|
||||
$hi = $code & 0xFF00;
|
||||
$lo = $code & 0x00FF;
|
||||
if ($lo == 0xFE) {
|
||||
$lo = 0x40;
|
||||
$hi += 0x0100;
|
||||
} elseif ($lo == 0x7E) {
|
||||
$lo = 0xA1;
|
||||
} else {
|
||||
$lo++;
|
||||
}
|
||||
$code = $hi | $lo;
|
||||
}
|
||||
return $chars;
|
||||
}
|
||||
|
||||
// big5_feq_chars: Return the Big5 frequently-used characters
|
||||
function &big5_feq_chars()
|
||||
{
|
||||
init_big5();
|
||||
return $GLOBALS["_BIG5"]["常用字"];
|
||||
}
|
||||
|
||||
// big5_nonfeq_chars: Return the Big5 non-frequently-used characters
|
||||
function &big5_nonfeq_chars()
|
||||
{
|
||||
init_big5();
|
||||
return $GLOBALS["_BIG5"]["次常用字"];
|
||||
}
|
||||
|
||||
// big5_punc_chars: Return the Big5 punctuation characters
|
||||
function &big5_punc_chars()
|
||||
{
|
||||
init_big5();
|
||||
return $GLOBALS["_BIG5"]["常用符號"];
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user