/[LeafOK_CVS]/fenglin/lib/str_process.inc.php
ViewVC logotype

Diff of /fenglin/lib/str_process.inc.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.1 by sysadm, Fri Jun 25 06:49:15 2004 UTC Revision 1.21 by sysadm, Sat Oct 18 14:15:35 2025 UTC
# Line 1  Line 1 
1  <?  <?php
2    function str_length(string $str) : int
 function split_line($str,$width=75,$pre="")  
3  {  {
         $lines = array();  
         $lines_count = 0;  
4          $len = strlen($str);          $len = strlen($str);
5            $ret = 0;
6    
7          $hz_ok = true;          for ($i = 0; $i < $len; $i++)
           
         if ($width<=0)  
                 return $str;  
           
         $line = $pre;  
         $line_count = strlen($line);  
         for($i=0;$i<$len;$i++)  
8          {          {
9                  if ($line_count >= $width && $hz_ok)                  $c = $str[$i];
10    
11                    // Process UTF-8 Chinese characters
12                    $v1 = ord($c);
13                    if ($v1 & 0x80) //head of multi-byte character
14                  {                  {
15                          $lines[$lines_count++] = $line;                          $v2 = ($v1 & 0x70) << 1;
16                          $line = $pre;                          while ($v2 & 0x80)
17                          $line_count = strlen($line);                          {
18                  }                                  $i++;
19                  $line.=$str[$i];                                  $c .= $str[$i];
20                  $line_count++;                                  $v2 = ($v2 & 0x7f) << 1;
21                  if (ord($str[$i])>127)                          }
                         $hz_ok = (!$hz_ok);  
                 if (ord($str[$i])<=127)  
                         $hz_ok = true;  
         }  
         $lines[$lines_count++] = $line;  
22    
23          $result = "";                          $ret += 2;
24          for($i=0;$i<$lines_count;$i++)                  }
25          {                  else
26                  $result.=($lines[$i]."\r\n");                  {
27                            $ret++;
28                    }
29          }          }
30          return $result;  
31            return $ret;
32  }  }
33    
34  function add_colon($str,$width=75)  function split_line(string $str, string $prefix = "", int $width = 76, int $lines_limit = PHP_INT_MAX, string $end_of_line = "\n") : string
35  {  {
36            if ($width <= 0)
37            {
38                    return $str;
39            }
40    
41          $result = "";          $result = "";
42                    $len = strlen($str);
43          $lines = explode("\n",str_replace("\r\n","\n",$str));          $prefix_len = str_length($prefix);
44    
45          foreach($lines as $line)          $lines_count = 0;
46    
47            $line = $prefix;
48            $line_len = $prefix_len;
49            for ($i = 0; $i < $len && $lines_count < $lines_limit; $i++)
50          {          {
51                  $result .= split_line($line,$width,": ");                  $c = $str[$i];
52    
53                    // Skip special characters
54                    if ($c == "\r" || $c == "\7")
55                    {
56                            continue;
57                    }
58    
59                    if ($c == "\n")
60                    {
61                            if ($lines_count + 1 >= $lines_limit)
62                            {
63                                    break;
64                            }
65    
66                            $result .= ($line . $end_of_line);
67                            $lines_count++;
68                            $line = $prefix;
69                            $line_len = $prefix_len;
70                            continue;
71                    }
72    
73                    // Process UTF-8 Chinese characters
74                    $v1 = ord($c);
75                    if ($v1 & 0x80) //head of multi-byte character
76                    {
77                            $v2 = ($v1 & 0x70) << 1;
78                            while ($v2 & 0x80)
79                            {
80                                    $i++;
81                                    $c .= $str[$i];
82                                    $v2 = ($v2 & 0x7f) << 1;
83                            }
84    
85                            // Each UTF-8 CJK character should use two character length for display
86                            if ($line_len + 2 > $width)
87                            {
88                                    if ($lines_count + 1 >= $lines_limit)
89                                    {
90                                            break;
91                                    }
92    
93                                    $result .= ($line . $end_of_line);
94                                    $lines_count++;
95                                    $line = $prefix;
96                                    $line_len = $prefix_len;
97                            }
98                            $line_len += 2;
99                    }
100                    else
101                    {
102                            $line_len++;
103                    }
104    
105                    if ($line_len > $width)
106                    {
107                            if ($lines_count + 1 >= $lines_limit)
108                            {
109                                    break;
110                            }
111    
112                            $result .= ($line . $end_of_line);
113                            $lines_count++;
114                            $line = $prefix;
115                            $line_len = $prefix_len + 1;
116                    }
117    
118                    $line .= $c;
119          }          }
120            
121            if ($lines_count < $lines_limit)
122            {
123                    $result .= $line;
124            }
125    
126          return $result;          return $result;
127  }  }
   
 ?>  


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1