@@ -305,12 +305,12 @@ + (NSString *)parseDiff:(NSString *)txt
305
305
NSScanner *scan=[NSScanner scannerWithString: txt];
306
306
NSString *block;
307
307
308
- if (![txt hasPrefix: @" diff --git " ])
309
- [scan scanUpToString: @" diff --git " intoString: &block]; // move to first diff
308
+ if (![txt hasPrefix: @" diff --" ])
309
+ [scan scanUpToString: @" diff --" intoString: &block]; // move to first diff
310
310
311
- while ([scan scanString: @" diff --git " intoString: NULL ]){ // is a diff start?
312
- [scan scanUpToString: @" \n diff --git " intoString: &block];
313
- [res appendString: [GLFileView parseDiffBlock: [NSString stringWithFormat: @" diff --git %@ " ,block]]];
311
+ while ([scan scanString: @" diff --" intoString: NULL ]){ // is a diff start?
312
+ [scan scanUpToString: @" \n diff --" intoString: &block];
313
+ [res appendString: [GLFileView parseDiffBlock: [NSString stringWithFormat: @" diff --%@ " ,block]]];
314
314
}
315
315
316
316
return res;
@@ -322,7 +322,7 @@ + (NSString *)parseDiffBlock:(NSString *)txt
322
322
NSScanner *scan=[NSScanner scannerWithString: txt];
323
323
NSString *block;
324
324
325
- [scan scanUpToString: @" \n @@ " intoString: &block];
325
+ [scan scanUpToString: @" \n @@" intoString: &block];
326
326
[res appendString: @" <table class='diff'><thead>" ];
327
327
[res appendString: [GLFileView parseDiffHeader: block]];
328
328
[res appendString: @" </td></tr></thead><tbody>" ];
@@ -331,9 +331,9 @@ + (NSString *)parseDiffBlock:(NSString *)txt
331
331
[res appendString: [GLFileView parseBinaryDiff: block]];
332
332
}
333
333
334
- while ([scan scanString: @" @@ " intoString: NULL ]){
335
- [scan scanUpToString: @" \n @@ " intoString: &block];
336
- [res appendString: [GLFileView parseDiffChunk: [NSString stringWithFormat: @" @@ %@ " ,block]]];
334
+ while ([scan scanString: @" @@" intoString: NULL ]){
335
+ [scan scanUpToString: @" \n @@" intoString: &block];
336
+ [res appendString: [GLFileView parseDiffChunk: [NSString stringWithFormat: @" @@%@ " ,block]]];
337
337
}
338
338
339
339
[res appendString: @" </tbody></table>" ];
@@ -376,34 +376,56 @@ + (NSString *)parseDiffChunk:(NSString *)txt
376
376
NSMutableString *res=[NSMutableString string ];
377
377
378
378
NSString *line;
379
- int l_line;
379
+ int l_line[ 32 ]; // FIXME: make dynamic
380
380
int r_line;
381
381
382
382
line=[lines nextObject ];
383
383
DLog (@" -=%@ =-" ,line);
384
- NSString *header=[line substringFromIndex: 3 ];
385
- NSRange hr = NSMakeRange (0 , [header rangeOfString: @" @@" ].location );
386
- header=[header substringWithRange: hr];
384
+
385
+ int arity = 0 ; /* How many files are merged here? Count the '@'! */
386
+ while ([line characterAtIndex: arity] == ' @' )
387
+ arity++;
388
+
389
+ NSRange hr = NSMakeRange (arity+1 , [line rangeOfString: @" @@" ].location -arity-1 );
390
+ NSString *header=[line substringWithRange: hr];
387
391
388
392
NSArray *pos=[header componentsSeparatedByString: @" " ];
389
- NSArray *pos_l=[[pos objectAtIndex: 0 ] componentsSeparatedByString: @" ," ];
390
- NSArray *pos_r=[[pos objectAtIndex: 1 ] componentsSeparatedByString: @" ," ];
393
+ NSArray *pos_r=[[pos objectAtIndex: arity-1 ] componentsSeparatedByString: @" ," ];
391
394
392
- l_line=abs ([[pos_l objectAtIndex: 0 ]integerValue]);
395
+ for (int i=0 ; i<arity-1 ; i++){
396
+ NSArray *pos_l=[[pos objectAtIndex: i] componentsSeparatedByString: @" ," ];
397
+ l_line[i]=abs ([[pos_l objectAtIndex: 0 ]integerValue]);
398
+ }
393
399
r_line=[[pos_r objectAtIndex: 0 ]integerValue];
394
400
395
- [res appendString: [NSString stringWithFormat: @" <tr class='header'><td colspan='3 '>%@ </td></tr>" ,line]];
401
+ [res appendString: [NSString stringWithFormat: @" <tr class='header'><td colspan='%d '>%@ </td></tr>" ,arity+ 1 ,line]];
396
402
while ((line=[lines nextObject ])){
397
- NSString *s=[line substringToIndex: 1 ];
398
- if ([s isEqualToString: @" " ]){
399
- [res appendString: [NSString stringWithFormat: @" <tr><td class='l'>%d </td><td class='r'>%d </td>" ,l_line++,r_line++]];
400
- }else if ([s isEqualToString: @" -" ]){
401
- [res appendString: [NSString stringWithFormat: @" <tr class='l'><td class='l'>%d </td><td class='r'></td>" ,l_line++]];
402
- }else if ([s isEqualToString: @" +" ]){
403
- [res appendString: [NSString stringWithFormat: @" <tr class='r'><td class='l'></td><td class='r'>%d </td>" ,r_line++]];
404
- }
405
- if (![s isEqualToString: @" \\ " ]){
406
- [res appendString: [NSString stringWithFormat: @" <td class='code'>%@ </td></tr>" ,[line substringFromIndex: 1 ]]];
403
+ NSString *prefix=[line substringToIndex: arity-1 ];
404
+ if ([prefix rangeOfString: @" -" ].location != NSNotFound ){
405
+ [res appendString: @" <tr class='l'>" ];
406
+ for (int i=0 ; i<arity-1 ; i++){
407
+ if ([prefix characterAtIndex: i] == ' -' ){
408
+ [res appendString: [NSString stringWithFormat: @" <td class='l'>%d </td>" ,l_line[i]++]];
409
+ }else {
410
+ [res appendString: @" <td class='l'></td>" ];
411
+ }
412
+ }
413
+ [res appendString: @" <td class='r'></td>" ];
414
+ }else if ([prefix rangeOfString: @" +" ].location != NSNotFound ){
415
+ [res appendString: @" <tr class='r'>" ];
416
+ for (int i=0 ; i<arity-1 ; i++){
417
+ [res appendString: @" <td class='l'></td>" ];
418
+ }
419
+ [res appendString: [NSString stringWithFormat: @" <td class='r'>%d </td>" ,r_line++]];
420
+ }else {
421
+ [res appendString: @" <tr>" ];
422
+ for (int i=0 ; i<arity-1 ; i++){
423
+ [res appendString: [NSString stringWithFormat: @" <td class='l'>%d </td>" ,l_line[i]++]];
424
+ }
425
+ [res appendString: [NSString stringWithFormat: @" <td class='r'>%d </td>" ,r_line++]];
426
+ }
427
+ if (![prefix hasPrefix: @" \\ " ]){
428
+ [res appendString: [NSString stringWithFormat: @" <td class='code'>%@ </td></tr>" ,[line substringFromIndex: arity-1 ]]];
407
429
}
408
430
}
409
431
return res;
@@ -416,7 +438,7 @@ + (NSString *)parseDiffHeader:(NSString *)txt
416
438
417
439
NSString *line=[lines nextObject ];
418
440
NSString *fileName=[self getFileName: line];
419
- [res appendString: [NSString stringWithFormat: @" <tr id='%@ '><td colspan='3 '><div style='float:left;'>" ,fileName]];
441
+ [res appendString: [NSString stringWithFormat: @" <tr id='%@ '><td colspan='33 '><div style='float:left;'>" ,fileName]];
420
442
do {
421
443
[res appendString: [NSString stringWithFormat: @" <p>%@ </p>" ,line]];
422
444
}while ((line=[lines nextObject ]));
@@ -433,11 +455,16 @@ + (NSString *)parseDiffHeader:(NSString *)txt
433
455
434
456
+(NSString *)getFileName : (NSString *)line
435
457
{
436
- NSRange b = [line rangeOfString: @" b/" ];
437
- NSString *file=[line substringFromIndex: b.location+3 ];
458
+ NSRange b = [line rangeOfString: @" b/" ];
459
+ if (b.length == 0 )
460
+ b = [line rangeOfString: @" --cc " ];
461
+
462
+ NSString *file=[line substringFromIndex: b.location+b.length];
463
+
438
464
DLog (@" line=%@ " ,line);
439
465
DLog (@" file=%@ " ,file);
440
- return file;
466
+
467
+ return file;
441
468
}
442
469
443
470
+(NSArray *)getFilesNames : (NSString *)line
@@ -492,17 +519,17 @@ +(BOOL)isImage:(NSString*)file
492
519
493
520
+(BOOL )isBinaryFile : (NSString *)line
494
521
{
495
- return (( [line length ]> 12 ) && [[line substringToIndex: 12 ] isEqualToString: @" Binary files" ]) ;
522
+ return [line hasPrefix: @" Binary files" ];
496
523
}
497
524
498
525
+(BOOL )isStartDiff : (NSString *)line
499
526
{
500
- return (( [line length ]> 10 ) && [[line substringToIndex: 10 ] isEqualToString: @" diff --git " ]) ;
527
+ return [line hasPrefix: @" diff --" ] ;
501
528
}
502
529
503
530
+(BOOL )isStartBlock : (NSString *)line
504
531
{
505
- return (( [line length ]> 3 ) && [[line substringToIndex: 3 ] isEqualToString: @" @@ " ]) ;
532
+ return [line hasPrefix: @" @@" ] ;
506
533
}
507
534
508
535
- (NSString *) parseBlame : (NSString *)txt
0 commit comments