SyntaxHighlighter functional

This commit is contained in:
German Laullon
2010-06-11 01:00:19 -07:00
parent 5ebb673840
commit a3a9173b35
7 changed files with 741 additions and 68 deletions
+4
View File
@@ -23,6 +23,7 @@
/* Begin PBXBuildFile section */
056438B70ED0C40B00985397 /* DetailViewTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = 056438B60ED0C40B00985397 /* DetailViewTemplate.png */; };
314E974611C17BB4007E9610 /* blame.css in Resources */ = {isa = PBXBuildFile; fileRef = 314E974511C17BB4007E9610 /* blame.css */; };
31D5F72511C21F7500BC94E4 /* shBrushObjC.js in Sources */ = {isa = PBXBuildFile; fileRef = 31D5F72411C21F7500BC94E4 /* shBrushObjC.js */; };
31F8A73611C0CE5300517F78 /* index.html in Resources */ = {isa = PBXBuildFile; fileRef = 31F8A73511C0CE5300517F78 /* index.html */; };
31F8A75411C0D0F800517F78 /* blame.js in Sources */ = {isa = PBXBuildFile; fileRef = 31F8A75311C0D0F800517F78 /* blame.js */; };
3BC07F4C0ED5A5C5009A7768 /* HistoryViewTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = 3BC07F4A0ED5A5C5009A7768 /* HistoryViewTemplate.png */; };
@@ -265,6 +266,7 @@
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
314E974511C17BB4007E9610 /* blame.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = blame.css; sourceTree = "<group>"; };
31D5F72411C21F7500BC94E4 /* shBrushObjC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shBrushObjC.js; sourceTree = "<group>"; };
31F8A73511C0CE5300517F78 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = "<group>"; };
31F8A75311C0D0F800517F78 /* blame.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = blame.js; sourceTree = "<group>"; };
32CA4F630368D1EE00C91783 /* GitX_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GitX_Prefix.pch; sourceTree = "<group>"; };
@@ -782,6 +784,7 @@
C3F4790811C1F0260020E7C1 /* shBrushXml.js */,
C3F4790911C1F0260020E7C1 /* shCore.js */,
C3F4790A11C1F0260020E7C1 /* shLegacy.js */,
31D5F72411C21F7500BC94E4 /* shBrushObjC.js */,
);
path = scripts;
sourceTree = "<group>";
@@ -1427,6 +1430,7 @@
C3F4793711C1F0260020E7C1 /* shLegacy.js in Sources */,
C3F4793811C1F0260020E7C1 /* shCore.js in Sources */,
C3F4793911C1F0260020E7C1 /* shLegacy.js in Sources */,
31D5F72511C21F7500BC94E4 /* shBrushObjC.js in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
+8 -7
View File
@@ -281,8 +281,6 @@
{
string=[string stringByReplacingOccurrencesOfString:@"<" withString:@"&lt;"];
string=[string stringByReplacingOccurrencesOfString:@">" withString:@"&gt;"];
NSString *codeLineFormat=@"\t<tr><td>%@</td><td><pre class='brush: js'>%@</pre></td></tr>\n";
NSArray *lines = [string componentsSeparatedByString:@"\n"];
NSString *line;
@@ -312,12 +310,13 @@
}
[res appendString:[headers objectForKey:[header objectAtIndex:0]]];
[res appendString:@"<table class='code'>\n"];
NSMutableString *code=[NSMutableString string];
do{
line=[lines objectAtIndex:i++];
}while([line characterAtIndex:0]!='\t');
line=[line stringByReplacingOccurrencesOfString:@"\t" withString:@"&nbsp;&nbsp;&nbsp;&nbsp;"];
[res appendFormat:codeLineFormat,[header objectAtIndex:2],line];
[code appendString:line];
[code appendString:@"\n"];
int n;
for(n=1;n<nLines;n++){
@@ -327,16 +326,18 @@
line=[lines objectAtIndex:i++];
}while([line characterAtIndex:0]!='\t');
line=[line stringByReplacingOccurrencesOfString:@"\t" withString:@"&nbsp;&nbsp;&nbsp;&nbsp;"];
[res appendFormat:codeLineFormat,[h objectAtIndex:2],line];
[code appendString:line];
[code appendString:@"\n"];
}
[res appendString:@"</table>\n</td>\n"];
[res appendFormat:@"<pre class='first-line: %@;brush: objc'>%@</pre>",[header objectAtIndex:2],code];
[res appendString:@"</td>\n"];
}else{
break;
}
[res appendString:@"</tr>\n"];
}
[res appendString:@"</table>\n"];
NSLog(res);
NSLog(@"%@",res);
return (NSString *)res;
}
@@ -51,10 +51,10 @@
height: auto !important;
width: auto !important;
line-height: 1.1em !important;
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
-font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
font-weight: normal !important;
font-style: normal !important;
font-size: 1em !important;
-font-size: 1em !important;
min-height: inherit !important; /* For IE8, FF & WebKit */
min-height: auto !important; /* For IE7 */
}
@@ -62,7 +62,7 @@
.syntaxhighlighter
{
width: 99% !important; /* 99% fixes IE8 horizontal scrollbar */
margin: 1em 0 1em 0 !important;
margin: 0 !important;
padding: 1px !important; /* adds a little border on top and bottom */
position: relative !important;
}
+10 -30
View File
@@ -3,7 +3,7 @@ table {
border-spacing: 0;
}
th, td {
body,th, td {
margin: 0;
padding: 0;
border: 0;
@@ -18,38 +18,29 @@ p{
padding: 0;
}
tr.block.l2 p.summary,
tr.block.l3 p.summary,
tr.block.l1 p.summary{
display: none;
}
table td {
table.blocks td {
vertical-align: top;
white-space: nowrap;
}
table {
font: 11px "Menlo";
p.author {
white-space: nowrap;
}
table.code td:nth-of-type(2) {
width: 100%;
padding-right: 5px;
padding-left: 5px;
table.blocks {
font: 11px "Menlo" !important;
}
table.code td:nth-of-type(1) {
text-align: right;
border-right: 1px solid black;
padding-right: 5px;
padding-left: 5px;
background-color: #f3f3f3;
}
table tr.block{
border-top: 1px solid black;
border-top: 1px solid #c9c9c9;
}
table.blocks{
border-left: 1px solid black;
border-bottom: 1px solid black;
border-bottom: 1px solid #c9c9c9;
width: 100%;
}
@@ -57,17 +48,6 @@ table.blocks tr td:nth-of-type(2) {
width: 100%;
}
-table.blocks tr.block:nth-of-type(even) td:nth-of-type(1),
-table.code tr:nth-of-type(even) td:nth-of-type(2) {
background-color: #efefff;
}
table.code {
border-left: 1px solid black;
border-right: 1px solid black;
width: 100%;
}
table.blocks tr.block td:nth-of-type(1){
padding-right: 5px;
padding-left: 5px;
+3
View File
@@ -1,6 +1,9 @@
var showFile = function(txt) {
$("txt").style.display = "";
$("txt").innerHTML="<pre>"+txt+"</pre>";
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.highlight();
return;
}
+712 -27
View File
@@ -8,34 +8,719 @@
<link rel="stylesheet" href="../../lib/syntaxhighlighter_2.1.364/styles/shCore.css" type="text/css" media="screen" title="no title" charset="utf-8">
<link rel="stylesheet" href="../../lib/syntaxhighlighter_2.1.364/styles/shThemeDefault.css" type="text/css" media="screen" title="no title" charset="utf-8">
</head>
<body>
<body onload="SyntaxHighlighter.highlight();">
<table class='blocks'>
<tr class='block l20'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a search field and subject</p></td>
<tr class='block l11'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<table class='code'>
<tr><td>1</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;/*</pre></td></tr>
<tr><td>2</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; * Extension for NSFileHandle to make it capable of easy network programming</pre></td></tr>
<tr><td>3</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; *</pre></td></tr>
<tr><td>4</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; * Version 1.0, get the newest from http://michael.stapelberg.de/NSFileHandleExt.php</pre></td></tr>
<tr><td>5</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; *</pre></td></tr>
<tr><td>6</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; * Copyright 2007 Michael Stapelberg</pre></td></tr>
<tr><td>7</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; *</pre></td></tr>
<tr><td>8</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; * Distributed under BSD-License, see http://michael.stapelberg.de/BSD.php</pre></td></tr>
<tr><td>9</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; *</pre></td></tr>
<tr><td>10</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp; */</pre></td></tr>
<tr><td>11</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;</pre></td></tr>
<tr><td>12</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;#import &lt;Cocoa/Cocoa.h&gt;</pre></td></tr>
<tr><td>13</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;netinet/in.h&gt;</pre></td></tr>
<tr><td>14</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;arpa/inet.h&gt;</pre></td></tr>
<tr><td>15</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;netdb.h&gt;</pre></td></tr>
<tr><td>16</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;fcntl.h&gt;</pre></td></tr>
<tr><td>17</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;</pre></td></tr>
<tr><td>18</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;@interface NSFileHandle(NSFileHandleExt)</pre></td></tr>
<tr><td>19</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;-(NSString*)readLine;</pre></td></tr>
<tr><td>20</td><td><pre class='brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;@end</pre></td></tr>
</table>
</td>
<pre class='first-line: 1;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;//
&nbsp;&nbsp;&nbsp;&nbsp;// PBGitTree.m
&nbsp;&nbsp;&nbsp;&nbsp;// GitTest
&nbsp;&nbsp;&nbsp;&nbsp;//
&nbsp;&nbsp;&nbsp;&nbsp;// Created by Pieter de Bie on 15-06-08.
&nbsp;&nbsp;&nbsp;&nbsp;// Copyright 2008 __MyCompanyName__. All rights reserved.
&nbsp;&nbsp;&nbsp;&nbsp;//
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;#import "PBGitTree.h"
&nbsp;&nbsp;&nbsp;&nbsp;#import "PBGitCommit.h"
&nbsp;&nbsp;&nbsp;&nbsp;#import "NSFileHandleExt.h"
</pre></td>
</tr>
</table> </body>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Allow double click to open file</p></td>
<td>
<pre class='first-line: 12;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;#import "PBEasyPipe.h"
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 13;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;#import "PBEasyFS.h"
</pre></td>
</tr>
<tr class='block l7'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 14;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;@implementation PBGitTree
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;@synthesize sha, path, repository, leaf, parent;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;+ (PBGitTree*) rootForCommit:(id) commit
&nbsp;&nbsp;&nbsp;&nbsp;{
</pre></td>
</tr>
<tr class='block l4'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 21;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PBGitCommit* c = commit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PBGitTree* tree = [[self alloc] init];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.parent = nil;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.leaf = NO;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Include libgit2 as submodule and use it to store sha's</p></td>
<td>
<pre class='first-line: 25;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.sha = [c realSha];
</pre></td>
</tr>
<tr class='block l18'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 26;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.repository = c.repository;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.path = @"";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return tree;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;+ (PBGitTree*) treeForTree: (PBGitTree*) prev andPath: (NSString*) path;
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PBGitTree* tree = [[self alloc] init];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.parent = prev;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.sha = prev.sha;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.repository = prev.repository;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.path = path;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return tree;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;- init
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children = nil;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 44;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localFileName = nil;
</pre></td>
</tr>
<tr class='block l4'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 45;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leaf = YES;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return self;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l5'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Use unified interface and display tree contents</p></td>
<td>
<pre class='first-line: 49;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (NSString*) refSpec
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"%@:%@", self.sha, self.fullPath];
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l12'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 54;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (BOOL) isLocallyCached
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSFileManager* fs = [NSFileManager defaultManager];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (localFileName && [fs fileExistsAtPath:localFileName])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSDate* mtime = [[fs attributesOfItemAtPath:localFileName error: nil] objectForKey:NSFileModificationDate];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([mtime compare:localMtime] == 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return YES;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NO;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Improve binary-file decision</p></td>
<td>
<pre class='first-line: 66;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (BOOL)hasBinaryHeader:(NSString*)contents
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Don't try to print binary-file contents</p></td>
<td>
<pre class='first-line: 67;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;{
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Improve binary-file decision</p></td>
<td>
<pre class='first-line: 68;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!contents)
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Don't try to print binary-file contents</p></td>
<td>
<pre class='first-line: 69;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NO;
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Improve binary-file decision</p></td>
<td>
<pre class='first-line: 71;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [contents rangeOfString:@"\0" options:0 range:NSMakeRange(0, ([contents length] &gt;= 8000) ? 7999 : [contents length])].location != NSNotFound;
</pre></td>
</tr>
<tr class='block l28'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Don't try to print binary-file contents</p></td>
<td>
<pre class='first-line: 72;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;- (BOOL)hasBinaryAttributes
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// First ask git check-attr if the file has a binary attribute custom set
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSFileHandle *handle = [repository handleInWorkDirForArguments:[NSArray arrayWithObjects:@"check-attr", @"binary", [self fullPath], nil]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSData *data = [handle readDataToEndOfFile];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *string = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!string)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NO;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string = [string stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([string hasSuffix:@"binary: set"])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return YES;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([string hasSuffix:@"binary: unset"])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NO;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Binary state unknown, do a check on common filename-extensions
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (NSString *extension in [NSArray arrayWithObjects:@".pdf", @".jpg", @".jpeg", @".png", @".bmp", @".gif", @".o", nil]) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([[self fullPath] hasSuffix:extension])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return YES;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NO;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l3'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Use unified interface and display tree contents</p></td>
<td>
<pre class='first-line: 100;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (NSString*) contents
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!leaf)
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author dbr</p><p class='summary'>summary When selecting a folder in tree-view, display the</p></td>
<td>
<pre class='first-line: 103;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"This is a tree with path %@", [self fullPath]];
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary initial blame functionality on tree view</p></td>
<td>
<pre class='first-line: 104;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l6'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Don't try to print binary-file contents</p></td>
<td>
<pre class='first-line: 105;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([self isLocallyCached]) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSData *data = [NSData dataWithContentsOfFile:localFileName];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!string)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return string;
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 111;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l4'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary initial blame functionality on tree view</p></td>
<td>
<pre class='first-line: 113;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//return [repository outputForArguments:[NSArray arrayWithObjects:@"show", [self refSpec], nil]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"blame", self.path, nil]];
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 117;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;// XXX: create img tag for images.
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary initial blame functionality on tree view</p></td>
<td>
<pre class='first-line: 118;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (NSString*) contents:(NSInteger)option
&nbsp;&nbsp;&nbsp;&nbsp;{
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 120;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString* contents;
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l3'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary initial blame functionality on tree view</p></td>
<td>
<pre class='first-line: 122;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!leaf)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"This is a tree with path %@", [self fullPath]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l6'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 125;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([self hasBinaryAttributes])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"%@ appears to be a binary file of %d bytes", [self fullPath], [self fileSize]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([self fileSize] &gt; 52428800) // ~50MB
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"%@ is too big to be displayed (%d bytes)", [self fullPath], [self fileSize]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary initial blame functionality on tree view</p></td>
<td>
<pre class='first-line: 131;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(option==0)
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 132;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contents= [repository outputForArguments:[NSArray arrayWithObjects:@"show", [self refSpec], nil]];
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary initial blame functionality on tree view</p></td>
<td>
<pre class='first-line: 133;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
</pre></td>
</tr>
<tr class='block l6'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 134;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contents=[PBGitTree parseBlame:[repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"blame", @"-p", self.fullPath, nil]]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([self hasBinaryHeader:contents])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"%@ appears to be a binary file of %d bytes", [self fullPath], [self fileSize]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return contents;
</pre></td>
</tr>
<tr class='block l26'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Don't try to print binary-file contents</p></td>
<td>
<pre class='first-line: 140;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;- (long long)fileSize
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (_fileSize)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _fileSize;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSFileHandle *handle = [repository handleForArguments:[NSArray arrayWithObjects:@"cat-file", @"-s", [self refSpec], nil]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *sizeString = [[NSString alloc] initWithData:[handle readDataToEndOfFile] encoding:NSISOLatin1StringEncoding];
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!sizeString)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_fileSize = -1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_fileSize = [sizeString longLongValue];
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _fileSize;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;- (NSString *)textContents
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!leaf)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"This is a tree with path %@", [self fullPath]];
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([self hasBinaryAttributes])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"%@ appears to be a binary file of %d bytes", [self fullPath], [self fileSize]];
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Improve binary-file decision</p></td>
<td>
<pre class='first-line: 166;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([self fileSize] &gt; 52428800) // ~50MB
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"%@ is too big to be displayed (%d bytes)", [self fullPath], [self fileSize]];
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Don't try to print binary-file contents</p></td>
<td>
<pre class='first-line: 168;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Improve binary-file decision</p></td>
<td>
<pre class='first-line: 169;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString* contents = [self contents];
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Don't try to print binary-file contents</p></td>
<td>
<pre class='first-line: 170;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Improve binary-file decision</p></td>
<td>
<pre class='first-line: 171;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([self hasBinaryHeader:contents])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [NSString stringWithFormat:@"%@ appears to be a binary file of %d bytes", [self fullPath], [self fileSize]];
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Johannes Gilger</p><p class='summary'>summary PBGitTree: Don't try to print binary-file contents</p></td>
<td>
<pre class='first-line: 173;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return contents;
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Use unified interface and display tree contents</p></td>
<td>
<pre class='first-line: 175;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l10'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 177;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (void) saveToFolder: (NSString *) dir
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString* newName = [dir stringByAppendingPathComponent:path];
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (leaf) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSFileHandle* handle = [repository handleForArguments:[NSArray arrayWithObjects:@"show", [self refSpec], nil]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSData* data = [handle readDataToEndOfFile];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[data writeToFile:newName atomically:YES];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else { // Directory
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[NSFileManager defaultManager] createDirectoryAtPath:newName attributes:nil];
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Michael Stephens</p><p class='summary'>summary Fix saving tree to folder</p></td>
<td>
<pre class='first-line: 187;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (PBGitTree* child in [self children])
</pre></td>
</tr>
<tr class='block l12'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 188;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[child saveToFolder: newName];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;- (NSString*) tmpDirWithContents
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (leaf)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!localFileName)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localFileName = [PBEasyFS tmpDirWithPrefix: path];
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 200;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (PBGitTree* child in [self children]) {
</pre></td>
</tr>
<tr class='block l8'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 201;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[child saveToFolder: localFileName];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return localFileName;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l3'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Allow double click to open file</p></td>
<td>
<pre class='first-line: 209;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (NSString*) tmpFileNameForContents
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!leaf)
</pre></td>
</tr>
<tr class='block l6'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 212;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [self tmpDirWithContents];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([self isLocallyCached])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return localFileName;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!localFileName)
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Ciar‡n Walsh</p><p class='summary'>summary Prevent confusing filenames when quick-looking files.</p></td>
<td>
<pre class='first-line: 218;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localFileName = [[PBEasyFS tmpDirWithPrefix: sha] stringByAppendingPathComponent:path];
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 219;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Allow double click to open file</p></td>
<td>
<pre class='first-line: 220;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSFileHandle* handle = [repository handleForArguments:[NSArray arrayWithObjects:@"show", [self refSpec], nil]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSData* data = [handle readDataToEndOfFile];
</pre></td>
</tr>
<tr class='block l6'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 222;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[data writeToFile:localFileName atomically:YES];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSFileManager* fs = [NSFileManager defaultManager];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localMtime = [[fs attributesOfItemAtPath:localFileName error: nil] objectForKey:NSFileModificationDate];
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return localFileName;
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Allow double click to open file</p></td>
<td>
<pre class='first-line: 228;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 230;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (NSArray*) children
&nbsp;&nbsp;&nbsp;&nbsp;{
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Use unified interface and display tree contents</p></td>
<td>
<pre class='first-line: 232;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (children != nil)
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 233;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return children;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Use unified interface and display tree contents</p></td>
<td>
<pre class='first-line: 235;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString* ref = [self refSpec];
</pre></td>
</tr>
<tr class='block l9'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 236;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSFileHandle* handle = [repository handleForArguments:[NSArray arrayWithObjects:@"show", ref, nil]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[handle readLine];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[handle readLine];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSMutableArray* c = [NSMutableArray array];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString* p = [handle readLine];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (p.length &gt; 0) {
</pre></td>
</tr>
<tr class='block l3'>
<td><p class='author'>author Nathan Kinsinger</p><p class='summary'>summary Bugfix: Avoid looping while parsing the children of a tree</p></td>
<td>
<pre class='first-line: 245;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([p isEqualToString:@"\r"])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l25'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 248;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL isLeaf = ([p characterAtIndex:p.length - 1] != '/');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!isLeaf)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = [p substringToIndex:p.length -1];
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PBGitTree* child = [PBGitTree treeForTree:self andPath:p];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child.leaf = isLeaf;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[c addObject: child];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = [handle readLine];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children = c;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return c;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;- (NSString*) fullPath
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!parent)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return @"";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ([parent.fullPath isEqualToString:@""])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return self.path;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return [parent.fullPath stringByAppendingPathComponent: self.path];
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l6'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Delete temporary files when they are deallocated</p></td>
<td>
<pre class='first-line: 273;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;- (void) finalize
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (localFileName)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[NSFileManager defaultManager] removeFileAtPath:localFileName handler:nil];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[super finalize];
&nbsp;&nbsp;&nbsp;&nbsp;}
</pre></td>
</tr>
<tr class='block l5'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 279;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;+(NSString *)parseBlame:(NSString *)string
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string=[string stringByReplacingOccurrencesOfString:@"&lt;" withString:@"&lt;"];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string=[string stringByReplacingOccurrencesOfString:@"&gt;" withString:@"&gt;"];
</pre></td>
</tr>
<tr class='block l29'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 284;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSArray *lines = [string componentsSeparatedByString:@"\n"];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *line;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSMutableDictionary *headers=[NSMutableDictionary dictionary];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSMutableString *res=[NSMutableString string];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[res appendString:@"&lt;table class='blocks'&gt;\n"];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(i&lt;[lines count]){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line=[lines objectAtIndex:i];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSArray *header=[line componentsSeparatedByString:@" "];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if([header count]==4){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int nLines=[(NSString *)[header objectAtIndex:3] intValue];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[res appendFormat:@"&lt;tr class='block l%d'&gt;\n",nLines];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line=[lines objectAtIndex:++i];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if([[[line componentsSeparatedByString:@" "] objectAtIndex:0] isEqual:@"author"]){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *author=line;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *summary=nil;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(summary==nil){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line=[lines objectAtIndex:i++];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if([[[line componentsSeparatedByString:@" "] objectAtIndex:0] isEqual:@"summary"]){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;summary=line;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *block=[NSString stringWithFormat:@"&lt;td&gt;&lt;p class='author'&gt;%@&lt;/p&gt;&lt;p class='summary'&gt;%@&lt;/p&gt;&lt;/td&gt;\n&lt;td&gt;\n",author,summary];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[headers setObject:block forKey:[header objectAtIndex:0]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[res appendString:[headers objectForKey:[header objectAtIndex:0]]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Not Committed Yet</p><p class='summary'>summary Version of PBGitTree.m from PBGitTree.m</p></td>
<td>
<pre class='first-line: 313;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSMutableString *code=[NSMutableString string];
</pre></td>
</tr>
<tr class='block l4'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 314;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line=[lines objectAtIndex:i++];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}while([line characterAtIndex:0]!='\t');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line=[line stringByReplacingOccurrencesOfString:@"\t" withString:@"&nbsp;&nbsp;&nbsp;&nbsp;"];
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Not Committed Yet</p><p class='summary'>summary Version of PBGitTree.m from PBGitTree.m</p></td>
<td>
<pre class='first-line: 318;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[code appendString:line];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[code appendString:@"\n"];
</pre></td>
</tr>
<tr class='block l9'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 320;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int n;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(n=1;n&lt;nLines;n++){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line=[lines objectAtIndex:i++];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSArray *h=[line componentsSeparatedByString:@" "];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line=[lines objectAtIndex:i++];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}while([line characterAtIndex:0]!='\t');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line=[line stringByReplacingOccurrencesOfString:@"\t" withString:@"&nbsp;&nbsp;&nbsp;&nbsp;"];
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Not Committed Yet</p><p class='summary'>summary Version of PBGitTree.m from PBGitTree.m</p></td>
<td>
<pre class='first-line: 329;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[code appendString:line];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[code appendString:@"\n"];
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 331;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
</pre></td>
</tr>
<tr class='block l2'>
<td><p class='author'>author Not Committed Yet</p><p class='summary'>summary Version of PBGitTree.m from PBGitTree.m</p></td>
<td>
<pre class='first-line: 332;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[res appendFormat:@"&lt;pre class='first-line: %@;brush: js'&gt;%@&lt;/pre&gt;",[header objectAtIndex:2],code];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[res appendString:@"&lt;/td&gt;\n"];
</pre></td>
</tr>
<tr class='block l6'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 334;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[res appendString:@"&lt;/tr&gt;\n"];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[res appendString:@"&lt;/table&gt;\n"];
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Not Committed Yet</p><p class='summary'>summary Version of PBGitTree.m from PBGitTree.m</p></td>
<td>
<pre class='first-line: 340;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"%@",res);
</pre></td>
</tr>
<tr class='block l3'>
<td><p class='author'>author German Laullon</p><p class='summary'>summary HTML Blame</p></td>
<td>
<pre class='first-line: 341;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (NSString *)res;
&nbsp;&nbsp;&nbsp;&nbsp;}
</pre></td>
</tr>
<tr class='block l1'>
<td><p class='author'>author Pieter de Bie</p><p class='summary'>summary Add a Tree displayer</p></td>
<td>
<pre class='first-line: 344;brush: js'>&nbsp;&nbsp;&nbsp;&nbsp;@end
</pre></td>
</tr>
</table>
</body>
</html>
+1 -1
View File
@@ -2,7 +2,7 @@
<head>
<script src="../../lib/GitX.js" type="text/javascript" charset="utf-8"></script>
<script src="../../lib/syntaxhighlighter_2.1.364/scripts/shCore.js" type="text/javascript" charset="utf-8"></script>
<script src="../../lib/syntaxhighlighter_2.1.364/scripts/shBrushJScript.js" type="text/javascript" charset="utf-8"></script>
<script src="../../lib/syntaxhighlighter_2.1.364/scripts/shBrushObjC.js" type="text/javascript" charset="utf-8"></script>
<script src="blame.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="blame.css" type="text/css" media="screen" title="no title" charset="utf-8">
<link rel="stylesheet" href="../../lib/syntaxhighlighter_2.1.364/styles/shCore.css" type="text/css" media="screen" title="no title" charset="utf-8">