Can hide unuseful pages
[banana.git] / banana / text.func.inc.php
CommitLineData
382606fb 1<?php\r
172d5dd2 2/********************************************************************************\r
7027794f 3* banana/text.php : text tools\r
172d5dd2
PHM
4* ---------------\r
5*\r
6* This file is part of the banana distribution\r
7* Copyright: See COPYING files that comes with this distribution\r
8********************************************************************************/\r
382606fb 9\r
7027794f 10function _b_($str)\r
11{\r
12 if (!is_utf8($str)) {\r
13 $str = utf8_encode($str);\r
14 }\r
15 return dgettext('banana', $str);\r
16}\r
17\r
18if (!function_exists('is_utf8')) {\r
19 function is_utf8($s)\r
20 {\r
21 return @iconv('utf-8', 'utf-8', $s) == $s;\r
22 }\r
23}\r
24\r
25function banana_utf8entities($source)\r
382606fb
PHM
26{\r
27 // array used to figure what number to decrement from character order value \r
28 // according to number of characters used to map unicode to ascii by utf-8\r
29 $decrement[4] = 240;\r
30 $decrement[3] = 224;\r
31 $decrement[2] = 192;\r
32 $decrement[1] = 0;\r
33 \r
34 // the number of bits to shift each charNum by\r
35 $shift[1][0] = 0;\r
36 $shift[2][0] = 6;\r
37 $shift[2][1] = 0;\r
38 $shift[3][0] = 12;\r
39 $shift[3][1] = 6;\r
40 $shift[3][2] = 0;\r
41 $shift[4][0] = 18;\r
42 $shift[4][1] = 12;\r
43 $shift[4][2] = 6;\r
44 $shift[4][3] = 0;\r
45 \r
46 $pos = 0;\r
47 $len = strlen($source);\r
48 $encodedString = '';\r
49 while ($pos < $len)\r
50 {\r
51 $charPos = $source{$pos};\r
52 $asciiPos = ord($charPos);\r
53 if ($asciiPos < 128)\r
54 {\r
55 $encodedString .= $charPos;\r
56 $pos++;\r
57 continue;\r
58 }\r
59 \r
60 $i=1;\r
61 if (($asciiPos >= 240) && ($asciiPos <= 255)) // 4 chars representing one unicode character\r
62 $i=4;\r
63 else if (($asciiPos >= 224) && ($asciiPos <= 239)) // 3 chars representing one unicode character\r
64 $i=3;\r
65 else if (($asciiPos >= 192) && ($asciiPos <= 223)) // 2 chars representing one unicode character\r
66 $i=2;\r
67 else // 1 char (lower ascii)\r
68 $i=1;\r
69 $thisLetter = substr($source, $pos, $i);\r
70 $pos += $i;\r
71 \r
72 // process the string representing the letter to a unicode entity\r
73 $thisLen = strlen($thisLetter);\r
74 $thisPos = 0;\r
75 $decimalCode = 0;\r
76 while ($thisPos < $thisLen)\r
77 {\r
78 $thisCharOrd = ord(substr($thisLetter, $thisPos, 1));\r
79 if ($thisPos == 0)\r
80 {\r
81 $charNum = intval($thisCharOrd - $decrement[$thisLen]);\r
82 $decimalCode += ($charNum << $shift[$thisLen][$thisPos]);\r
83 }\r
84 else\r
85 {\r
86 $charNum = intval($thisCharOrd - 128);\r
87 $decimalCode += ($charNum << $shift[$thisLen][$thisPos]);\r
88 }\r
89 \r
90 $thisPos++;\r
91 }\r
92 \r
93 $encodedLetter = '&#'. str_pad($decimalCode, ($thisLen==1)?3:5, '0', STR_PAD_LEFT).';';\r
94 $encodedString .= $encodedLetter;\r
95 }\r
96 \r
97 return $encodedString;\r
98}\r
99\r
d5588318 100// vim:set et sw=4 sts=4 ts=4\r
382606fb 101?>\r