diff --git a/GLFileView.h b/GLFileView.h index 7dd9125..a734dd0 100644 --- a/GLFileView.h +++ b/GLFileView.h @@ -40,6 +40,7 @@ +(BOOL)isBinaryFile:(NSString *)line; +(NSString*)mimeTypeForFileName:(NSString*)file; +(BOOL)isImage:(NSString*)file; ++(BOOL)isDiffHeader:(NSString*)line; @property(retain) NSMutableArray *groups; @property(retain) NSString *logFormat; diff --git a/GLFileView.m b/GLFileView.m index 27e8ac1..1ff1ded 100644 --- a/GLFileView.m +++ b/GLFileView.m @@ -274,62 +274,27 @@ NSArray *lines = [txt componentsSeparatedByString:@"\n"]; NSString *line; NSMutableString *res=[NSMutableString string]; - BOOL inDiff=FALSE; - BOOL inBlock=FALSE; - + int l_line,l_end; int r_line,r_end; - int i; - for (i=0; i<[lines count]; i++) { + + int i=0; + do { line=[lines objectAtIndex:i]; - - if([GLFileView isStartBlock:line]){ - [res appendString:@""]; - inDiff=FALSE; - NSString *header=[line substringFromIndex:3]; - NSRange hr = NSMakeRange(0, [header rangeOfString:@" @@"].location); - header=[header substringWithRange:hr]; - - NSArray *pos=[header componentsSeparatedByString:@" "]; - NSArray *pos_l=[[pos objectAtIndex:0] componentsSeparatedByString:@","]; - NSArray *pos_r=[[pos objectAtIndex:1] componentsSeparatedByString:@","]; - - l_end=l_line=abs([[pos_l objectAtIndex:0]integerValue]); - if ([pos_l count]>1) { - l_end=l_line+[[pos_l objectAtIndex:1]integerValue]; - } - - r_end=r_line=[[pos_r objectAtIndex:0]integerValue]; - if ([pos_r count]>1) { - r_end=r_line+[[pos_r objectAtIndex:1]integerValue]; - } - - [res appendString:[NSString stringWithFormat:@"%@",line]]; - inBlock=TRUE; - }else if(inBlock){ - NSString *s=[line substringToIndex:1]; - if([s isEqualToString:@" "]){ - [res appendString:[NSString stringWithFormat:@"%d%d",l_line++,r_line++]]; - }else if([s isEqualToString:@"-"]){ - [res appendString:[NSString stringWithFormat:@"%d",l_line++]]; - }else if([s isEqualToString:@"+"]){ - [res appendString:[NSString stringWithFormat:@"%d",r_line++]]; - } - [res appendString:[NSString stringWithFormat:@"%@",[line substringFromIndex:1]]]; - if(!(l_line"]; - inDiff=TRUE; + if([GLFileView isStartDiff:line]){ NSString *fileName=[self getFileName:line]; - [res appendString:[NSString stringWithFormat:@"
",fileName]]; - [res appendString:[NSString stringWithFormat:@"",fileName]]; - [res appendString:[NSString stringWithFormat:@"

%@

",line]]; - }else if(inDiff){ - [res appendString:[NSString stringWithFormat:@"

%@

",line]]; + [res appendString:[NSString stringWithFormat:@""]; + if([self isBinaryFile:line]){ - [res appendString:@""]; NSArray *files=[self getFilesNames:line]; if(![[files objectAtIndex:0] isAbsolutePath]){ [res appendString:[NSString stringWithFormat:@"",[files objectAtIndex:0]]]; @@ -343,11 +308,50 @@ [res appendString:[NSString stringWithFormat:@"",[files objectAtIndex:1]]]; } } + }else{ + do{ + NSString *header=[line substringFromIndex:3]; + NSRange hr = NSMakeRange(0, [header rangeOfString:@" @@"].location); + header=[header substringWithRange:hr]; + + NSArray *pos=[header componentsSeparatedByString:@" "]; + NSArray *pos_l=[[pos objectAtIndex:0] componentsSeparatedByString:@","]; + NSArray *pos_r=[[pos objectAtIndex:1] componentsSeparatedByString:@","]; + + l_end=l_line=abs([[pos_l objectAtIndex:0]integerValue]); + if ([pos_l count]>1) { + l_end=l_line+[[pos_l objectAtIndex:1]integerValue]; + } + + r_end=r_line=[[pos_r objectAtIndex:0]integerValue]; + if ([pos_r count]>1) { + r_end=r_line+[[pos_r objectAtIndex:1]integerValue]; + } + + [res appendString:[NSString stringWithFormat:@"",line]]; + do{ + line=[lines objectAtIndex:++i]; + NSString *s=[line substringToIndex:1]; + if([s isEqualToString:@" "]){ + [res appendString:[NSString stringWithFormat:@"",l_line++,r_line++]]; + }else if([s isEqualToString:@"-"]){ + [res appendString:[NSString stringWithFormat:@"",l_line++]]; + }else if([s isEqualToString:@"+"]){ + [res appendString:[NSString stringWithFormat:@"",r_line++]]; + } + [res appendString:[NSString stringWithFormat:@"",[line substringFromIndex:1]]]; + }while((l_line
",fileName]]; + do{ + [res appendString:[NSString stringWithFormat:@"

%@

",line]]; + line=[lines objectAtIndex:++i]; + }while([GLFileView isDiffHeader:line]); + [res appendString:@"
"]; + if(![self isBinaryFile:line]){ + [res appendString:[NSString stringWithFormat:@"",fileName]]; + } + [res appendString:@"
%@
%@
%d%d
%d
%d%@
"]; + }else { + i++; } - } - if(inDiff) - [res appendString:@"
"]; + }while(i<[lines count]); + return res; } @@ -396,6 +400,12 @@ return mimeType; } ++(BOOL)isDiffHeader:(NSString*)line +{ + unichar c=[line characterAtIndex:0]; + return (c=='i') || (c=='m') || (c=='n') || (c=='d') || (c=='-') || (c=='+'); +} + +(BOOL)isImage:(NSString*)file { NSString *mimeType=[GLFileView mimeTypeForFileName:file];