PageRenderTime 44ms CodeModel.GetById 35ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

HTML | 100 lines | 100 code | 0 blank | 0 comment | 0 complexity | b064cd90e3b41d9b49993971fc817e18 MD5 | raw file
  1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
  2<html lang="en" xml:lang="en">
  4<title>cfdiff Documentation</title>
  5<style type="text/css" title="cfdiff">
  6html, body {
  7	padding: 8px;
  8	background-color: white;
  9	color: black;
 10	font-size: 1em;
 12h1 {
 13	margin: -24px -24px 0px -24px;
 14	padding: 8px;
 15	color: #def;
 16	background-color: #248;
 17	border-bottom: 1px dashed #acf;
 18	font-size: 2em;
 20h2 {
 21	margin: 0px -24px 8px -24px;
 22	padding: 4px 8px;
 23	border: 1px solid #248;
 24	border-top: none;
 25	background-color: #48f;
 26	color: #def;
 27	font-size: 1.5em;
 29.filelist { width: 100%; border: 1px solid #999; }
 30.filelist th, .foot { background-color: #ccf; }
 31.even { background-color: #e8e8ff; }
 32.file, code, pre.code { font-family: 'Bitstream Sans Mono', 'Sans Mono', 'Lucida Console', 'Monaco', 'Lucida Typewriter', 'Courier New', Courier, fixed-width, monospace; }
 33.file { color: maroon; }
 34pre.code, code { background-color: #ffd; }
 35pre.code { border-left: 1px solid #ff9; border-right: 1px solid #ff9; padding: 0.75em; max-height: 8em; overflow: auto; }
 40<h2>Quick Start</h2>
 42	<li>There's no ZIP/TAR archive of the project, so you'll need to download each of the files individually from <a href="" target="_blank">the cfdiff Google Code repository</a>.  See the next section for a list of what each of the files do.</li>
 43	<li>Copy at least the <kbd class="file">diff.cfc</kbd> file to your CFC area.
 44		<ul>
 45			<li><strong>If you are the organized type ... </strong> make a folder in your web root named <kbd class="file">org</kbd>, then a subfolder under that named <kbd class="file">rickosborne</kbd>, and put the file under there.</li>
 46			<li><strong>If you are the lazy type ... </strong> drop it in your web root.</li>
 47			<li><strong>If you know what you are doing ... </strong> then I really don't care where you drop it.</li>
 48		</ul>
 49	</li>
 50	<li>Write some code that does something like this:
 51		<pre class="code">&lt;cfset Differ = CreateObject("component", "org.rickosborne.diff")&gt;
 52&lt;cfset LeftFile = ListToArray("a,b,c,d,e,f,g")&gt;
 53&lt;cfset RightFile = ListToArray("a,d,e,1,2,f,g,h")&gt;
 54&lt;cfset Difference = Differ.DiffArrays(LeftFile, RightFile)&gt;
 55&lt;cfset Pretty = Differ.Parallelize(Difference, LeftFile, RightFile)&gt;</pre>
 56		If you chose the <em>lazy</em> option from the previous list, your call to create the CFC will look like this:
 57		<pre class="code">&lt;cfset Differ=CreateObject("component","diff")&gt;</pre>
 58		If you chose the third option, then I presume you can figure out how to create the object.
 59	</li>
 60	<li>That last variable, <code>Pretty</code>, is the one you'll want to dump or loop over or whatever.  If you prefer a unified diff instead of parallel, you can use <code>UnifiedDiffArrays()</code> instead of <code>Parallelize()</code> with the same arguments.</li>
 63<table class="filelist">
 64	<thead>
 65		<tr>
 66			<th>File</th>
 67			<th>Purpose</th>
 68			<th nowrap="nowrap">Final Location</th>
 69		</tr>
 70	</thead>
 71	<tbody>
 72		<tr class="odd"><td class="file"><a href="">cfdiff.css</a></td><td>Example stylesheet for the SVN browser.</td><td>SVN Browser root.</td></tr>
 73		<tr class="even"><td class="file"><a href="">diff.cfc</a></td><td>The main component that does all of the work.</td><td>See above.  Maybe web root, maybe not.</td></tr>
 74		<tr class="odd"><td class="file"><a href="">difftest.cfc</a></td><td>Unit tests for the <kbd class="file">diff.cfc</kbd> file.</td><td><em>Not required.</em></td></tr>
 75		<tr class="even"><td class="file"><a href="">svn.cfm</a></td><td>Basic SVN browser front-end.</td><td>Web root?</td></tr>
 76		<tr class="odd"><td class="file"><a href="">svnbrowser.cfc</a></td><td>Back-end for the SVN browser that interfaces with the JavaSVN API.</td><td>See above.  Maybe web root, maybe not.</td></tr>
 77		<tr class="even"><td class="file"><a href="">testdiff.cfm</a></td><td>Used to run the unit tests for <kbd class="file">diff.cfc</kbd>.</td><td><em>Not required.</em></td></tr>
 78	</tbody>
 79	<tfoot>
 80		<tr class="foot"><td colspan="3">6 files.</td></tr>
 81	</tfoot>
 83<h2>Implementation Details</h2>
 84<p>If you want to use the SVN Browser, you'll need to install the <a href="" target="_blank">TMate JavaSVN library</a>.  If you just want to run diffs, you <strong>do not</strong> need this library.</p>
 85<p>Look at <kbd class="file">svn.cfm</kbd> for the easiest way to show a diff.  It's going to look something like this:</p>
 86<pre class="code">&lt;cfloop query="Pretty"&gt;
 87	&lt;tr&gt;
 88		&lt;td&gt;&lt;cfif IsNumeric(AtFirst)&gt;#NumberFormat(AtFirst)#&lt;cfelse&gt;&amp;nbsp;&lt;/cfif&gt;&lt;/td&gt;
 89		&lt;td&gt;&lt;cfif Len(ValueFirst) GT 0&gt;#Replace(HTMLEditFormat(ValueFirst),Chr(9),"&amp;nbsp;&amp;nbsp;&amp;nbsp;","ALL")#&lt;cfelse&gt;&amp;nbsp;&lt;/cfif&gt;&lt;/td&gt;
 90		&lt;td&gt;&lt;cfif IsNumeric(AtSecond)&gt;#NumberFormat(AtSecond)#&lt;cfelse&gt;&amp;nbsp;&lt;/cfif&gt;&lt;/td&gt;
 91		&lt;td&gt;&lt;cfif Len(ValueSecond) GT 0&gt;#Replace(HTMLEditFormat(ValueSecond),Chr(9),"&amp;nbsp;&amp;nbsp;&amp;nbsp;","ALL")#&lt;cfelse&gt;&amp;nbsp;&lt;/cfif&gt;&lt;/td&gt;
 92	&lt;/tr&gt;
 94<p>If you decide you'd prefer to work with the raw difference, that's what that intermediate <code>Difference</code> variable is.  Go to town.</p>
 96<p>This code is licensed under the <a href="" target="_blank">Mozilla Public License (MPL) version 1.1</a>.  Read the license before you use the code!</p>
 97<h2>Version / About</h2>
 98<p>Original ColdFusion code by <a href="">Rick Osborne</a>, 2006.  The code includes an algorithm translated from the C-Sharp source by <a href="">Matthias Hertel</a>, which itself was originally released under the <a href="">Creative Commons Attribution 2.0 Germany license</a> and is based on a paper by Eugene Meyers in <em>Algorithmica Vol. 1 No. 2, 1986, p 251: "An O(ND) Difference Algorithm and its Variations"</em>.</p>