5
5
* PHP version 5
6
6
*
7
7
* Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com>
8
- *
8
+ *
9
9
* All rights reserved.
10
- *
11
- * Redistribution and use in source and binary forms, with or without
10
+ *
11
+ * Redistribution and use in source and binary forms, with or without
12
12
* modification, are permitted provided that the following conditions are met:
13
13
*
14
14
* - Redistributions of source code must retain the above copyright notice,
15
15
* this list of conditions and the following disclaimer.
16
16
* - Redistributions in binary form must reproduce the above copyright notice,
17
17
* this list of conditions and the following disclaimer in the documentation
18
18
* and/or other materials provided with the distribution.
19
- * - Neither the name of the Chris Boulton nor the names of its contributors
20
- * may be used to endorse or promote products derived from this software
19
+ * - Neither the name of the Chris Boulton nor the names of its contributors
20
+ * may be used to endorse or promote products derived from this software
21
21
* without specific prior written permission.
22
22
*
23
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
33
* POSSIBILITY OF SUCH DAMAGE.
34
34
*
35
35
* @package DiffLib
@@ -82,12 +82,18 @@ public function render()
82
82
83
83
list ($ start , $ end ) = $ this ->getChangeExtent ($ fromLine , $ toLine );
84
84
if ($ start != 0 || $ end != 0 ) {
85
- $ last = $ end + strlen ($ fromLine );
86
- $ fromLine = substr_replace ($ fromLine , "\0" , $ start , 0 );
87
- $ fromLine = substr_replace ($ fromLine , "\1" , $ last + 1 , 0 );
88
- $ last = $ end + strlen ($ toLine );
89
- $ toLine = substr_replace ($ toLine , "\0" , $ start , 0 );
90
- $ toLine = substr_replace ($ toLine , "\1" , $ last + 1 , 0 );
85
+ $ realEnd = mb_strlen ($ fromLine ) + $ end ;
86
+ $ fromLine = mb_substr ($ fromLine , 0 , $ start )
87
+ . "\0"
88
+ . mb_substr ($ fromLine , $ start , $ realEnd - $ start )
89
+ . "\1"
90
+ . mb_substr ($ fromLine , $ realEnd );
91
+ $ realEnd = mb_strlen ($ toLine ) + $ end ;
92
+ $ toLine = mb_substr ($ toLine , 0 , $ start )
93
+ . "\0"
94
+ . mb_substr ($ toLine , $ start , $ realEnd - $ start )
95
+ . "\1"
96
+ . mb_substr ($ toLine , $ realEnd );
91
97
$ a [$ i1 + $ i ] = $ fromLine ;
92
98
$ b [$ j1 + $ i ] = $ toLine ;
93
99
}
@@ -149,13 +155,13 @@ public function render()
149
155
private function getChangeExtent ($ fromLine , $ toLine )
150
156
{
151
157
$ start = 0 ;
152
- $ limit = min (strlen ($ fromLine ), strlen ($ toLine ));
153
- while ($ start < $ limit && $ fromLine{ $ start} == $ toLine{ $ start} ) {
158
+ $ limit = min (mb_strlen ($ fromLine ), mb_strlen ($ toLine ));
159
+ while ($ start < $ limit && mb_substr ( $ fromLine, $ start, 1 ) == mb_substr ( $ toLine, $ start, 1 ) ) {
154
160
++$ start ;
155
161
}
156
162
$ end = -1 ;
157
163
$ limit = $ limit - $ start ;
158
- while (-$ end <= $ limit && substr ($ fromLine , $ end , 1 ) == substr ($ toLine , $ end , 1 )) {
164
+ while (-$ end <= $ limit && mb_substr ($ fromLine , $ end , 1 ) == mb_substr ($ toLine , $ end , 1 )) {
159
165
--$ end ;
160
166
}
161
167
return array (
@@ -222,4 +228,4 @@ private function htmlSafe($string)
222
228
{
223
229
return htmlspecialchars ($ string , ENT_NOQUOTES , 'UTF-8 ' );
224
230
}
225
- }
231
+ }
0 commit comments