Skip to content

Commit a7904a5

Browse files
committed
support splitter as a function while compare
1 parent aab9c91 commit a7904a5

File tree

6 files changed

+43
-8
lines changed

6 files changed

+43
-8
lines changed

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "diff-merge",
33
"main": "dist/index.js",
4-
"version": "1.0.0",
4+
"version": "1.0.1",
55
"homepage": "https://github.com/nighca/diff-merge",
66
"authors": [
77
"nighca <[email protected]>"

dist/diff.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*/
1313

1414
var compare = function(cnt1, cnt2, splitter){
15-
var SPLITTER = splitter || '',
15+
var SPLITTER = typeof splitter === 'string' ? splitter : '',
1616

1717
MARK_EMPTY = -1,
1818
MARK_SAME = 0,
@@ -35,8 +35,14 @@ var compare = function(cnt1, cnt2, splitter){
3535
}
3636

3737
// convert string to array
38-
var arr1 = cnt1.split(SPLITTER),
38+
var arr1, arr2;
39+
if(typeof splitter === 'function'){
40+
arr1 = splitter(cnt1);
41+
arr2 = splitter(cnt2);
42+
}else{
43+
arr1 = cnt1.split(SPLITTER);
3944
arr2 = cnt2.split(SPLITTER);
45+
}
4046

4147
var N = arr1.length,
4248
M = arr2.length,

dist/diff.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/myers-compare.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
var compare = function(cnt1, cnt2, splitter){
8-
var SPLITTER = splitter || '',
8+
var SPLITTER = typeof splitter === 'string' ? splitter : '',
99

1010
MARK_EMPTY = -1,
1111
MARK_SAME = 0,
@@ -28,8 +28,14 @@ var compare = function(cnt1, cnt2, splitter){
2828
}
2929

3030
// convert string to array
31-
var arr1 = cnt1.split(SPLITTER),
31+
var arr1, arr2;
32+
if(typeof splitter === 'function'){
33+
arr1 = splitter(cnt1);
34+
arr2 = splitter(cnt2);
35+
}else{
36+
arr1 = cnt1.split(SPLITTER);
3237
arr2 = cnt2.split(SPLITTER);
38+
}
3339

3440
var N = arr1.length,
3541
M = arr2.length,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "diff-merge",
3-
"version": "1.0.0",
3+
"version": "1.0.1",
44
"description": "diff & merge algorithm realized with Javascript",
55
"main": "index.js",
66
"directories": {

test/test.html

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,30 @@
6767
in2 = document.getElementById('in2');
6868

6969
var doTest = function(){
70-
test(in1.value, in2.value, ',');
70+
test(in1.value, in2.value, participle);
71+
};
72+
73+
// do test with participle
74+
var participle = function(cnt){
75+
var arr = [];
76+
for(var i = 1, l = cnt.length, pos = 0; i < l; i++){
77+
var isPlainPattern = /[\w\_\$]+/,
78+
isPrevPlain = isPlainPattern.test(cnt[i-1]),
79+
isPlain = isPlainPattern.test(cnt[i]);
80+
81+
if(
82+
!(isPrevPlain && isPlain)
83+
){
84+
arr.push(cnt.slice(pos, i));
85+
pos = i;
86+
}
87+
88+
if(i === l-1){
89+
arr.push(cnt.slice(pos));
90+
}
91+
}
92+
93+
return arr;
7194
};
7295
</script>
7396
</body>

0 commit comments

Comments
 (0)