summaryrefslogtreecommitdiff
path: root/LCS/Hunk.html
diff options
context:
space:
mode:
Diffstat (limited to 'LCS/Hunk.html')
-rw-r--r--LCS/Hunk.html397
1 files changed, 397 insertions, 0 deletions
diff --git a/LCS/Hunk.html b/LCS/Hunk.html
new file mode 100644
index 0000000..0a22329
--- /dev/null
+++ b/LCS/Hunk.html
@@ -0,0 +1,397 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+<meta charset="UTF-8">
+
+<title>class LCS::Hunk - diff-lcs-1.5.0 Documentation</title>
+
+<script type="text/javascript">
+ var rdoc_rel_prefix = "../";
+ var index_rel_prefix = "../";
+</script>
+
+<script src="../js/navigation.js" defer></script>
+<script src="../js/search.js" defer></script>
+<script src="../js/search_index.js" defer></script>
+<script src="../js/searcher.js" defer></script>
+<script src="../js/darkfish.js" defer></script>
+
+<link href="../css/fonts.css" rel="stylesheet">
+<link href="../css/rdoc.css" rel="stylesheet">
+
+
+<body id="top" role="document" class="class">
+<nav role="navigation">
+ <div id="project-navigation">
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
+ <h2>
+ <a href="../index.html" rel="home">Home</a>
+ </h2>
+
+ <div id="table-of-contents-navigation">
+ <a href="../table_of_contents.html#pages">Pages</a>
+ <a href="../table_of_contents.html#classes">Classes</a>
+ <a href="../table_of_contents.html#methods">Methods</a>
+ </div>
+</div>
+
+ <div id="search-section" role="search" class="project-section initially-hidden">
+ <form action="#" method="get" accept-charset="utf-8">
+ <div id="search-field-wrapper">
+ <input id="search-field" role="combobox" aria-label="Search"
+ aria-autocomplete="list" aria-controls="search-results"
+ type="text" name="search" placeholder="Search" spellcheck="false"
+ title="Type to search, Up and Down to navigate, Enter to load">
+ </div>
+
+ <ul id="search-results" aria-label="Search Results"
+ aria-busy="false" aria-expanded="false"
+ aria-atomic="false" class="initially-hidden"></ul>
+ </form>
+</div>
+
+ </div>
+
+
+
+ <div id="class-metadata">
+
+
+<div id="parent-class-section" class="nav-section">
+ <h3>Parent</h3>
+
+ <p class="link">Object
+</div>
+
+
+
+
+<!-- Method Quickref -->
+<div id="method-list-section" class="nav-section">
+ <h3>Methods</h3>
+
+ <ul class="link-list" role="directory">
+ <li ><a href="#method-c-new">::new</a>
+ <li ><a href="#method-i-diff">#diff</a>
+ <li ><a href="#method-i-merge">#merge</a>
+ <li ><a href="#method-i-missing_last_newline-3F">#missing_last_newline?</a>
+ <li ><a href="#method-i-overlaps-3F">#overlaps?</a>
+ <li ><a href="#method-i-unshift">#unshift</a>
+ </ul>
+</div>
+
+ </div>
+</nav>
+
+<main role="main" aria-labelledby="class-LCS::Hunk">
+ <h1 id="class-LCS::Hunk" class="class">
+ class LCS::Hunk
+ </h1>
+
+ <section class="description">
+
+<p>A <a href="Hunk.html"><code>Hunk</code></a> is a group of Blocks which overlap because of the context surrounding each block. (So if we&#39;re not using context, every hunk will contain one block.) Used in the diff program (bin/ldiff).</p>
+
+ </section>
+
+ <section id="5Buntitled-5D" class="documentation-section">
+
+
+
+ <section class="attribute-method-details" class="method-section">
+ <header>
+ <h3>Attributes</h3>
+ </header>
+
+ <div id="attribute-i-blocks" class="method-detail">
+ <div class="method-heading attribute-method-heading">
+ <span class="method-name">blocks</span><span
+ class="attribute-access-type">[R]</span>
+ </div>
+
+ <div class="method-description">
+
+ </div>
+ </div>
+ <div id="attribute-i-end_new" class="method-detail">
+ <div class="method-heading attribute-method-heading">
+ <span class="method-name">end_new</span><span
+ class="attribute-access-type">[R]</span>
+ </div>
+
+ <div class="method-description">
+
+ </div>
+ </div>
+ <div id="attribute-i-end_old" class="method-detail">
+ <div class="method-heading attribute-method-heading">
+ <span class="method-name">end_old</span><span
+ class="attribute-access-type">[R]</span>
+ </div>
+
+ <div class="method-description">
+
+ </div>
+ </div>
+ <div id="attribute-i-file_length_difference" class="method-detail">
+ <div class="method-heading attribute-method-heading">
+ <span class="method-name">file_length_difference</span><span
+ class="attribute-access-type">[R]</span>
+ </div>
+
+ <div class="method-description">
+
+ </div>
+ </div>
+ <div id="attribute-i-flag_context" class="method-detail">
+ <div class="method-heading attribute-method-heading">
+ <span class="method-name">flag_context</span><span
+ class="attribute-access-type">[RW]</span>
+ </div>
+
+ <div class="method-description">
+ <p>Change the “start” and “end” fields to note that context should be added to this hunk.</p>
+ </div>
+ </div>
+ <div id="attribute-i-start_new" class="method-detail">
+ <div class="method-heading attribute-method-heading">
+ <span class="method-name">start_new</span><span
+ class="attribute-access-type">[R]</span>
+ </div>
+
+ <div class="method-description">
+
+ </div>
+ </div>
+ <div id="attribute-i-start_old" class="method-detail">
+ <div class="method-heading attribute-method-heading">
+ <span class="method-name">start_old</span><span
+ class="attribute-access-type">[R]</span>
+ </div>
+
+ <div class="method-description">
+
+ </div>
+ </div>
+ </section>
+
+
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
+ <header>
+ <h3>Public Class Methods</h3>
+ </header>
+
+ <div id="method-c-new" class="method-detail ">
+ <div class="method-heading">
+ <span class="method-name">new</span><span
+ class="method-args">(data_old, data_new, piece, flag_context, file_length_difference)</span>
+ <span class="method-click-advice">click to toggle source</span>
+ </div>
+
+ <div class="method-description">
+ <p>Create a hunk using references to both the old and new data, as well as the piece of data.</p>
+
+ <div class="method-source-code" id="new-source">
+ <pre><span class="ruby-comment"># File lib/diff/lcs/hunk.rb, line 16</span>
+<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">data_old</span>, <span class="ruby-identifier">data_new</span>, <span class="ruby-identifier">piece</span>, <span class="ruby-identifier">flag_context</span>, <span class="ruby-identifier">file_length_difference</span>)
+ <span class="ruby-comment"># At first, a hunk will have just one Block in it</span>
+ <span class="ruby-ivar">@blocks</span> = [<span class="ruby-constant">Diff</span><span class="ruby-operator">::</span><span class="ruby-constant">LCS</span><span class="ruby-operator">::</span><span class="ruby-constant">Block</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">piece</span>)]
+
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">remove</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">insert</span>.<span class="ruby-identifier">empty?</span>
+ <span class="ruby-identifier">fail</span> <span class="ruby-node">&quot;Cannot build a hunk from #{piece.inspect}; has no add or remove actions&quot;</span>
+ <span class="ruby-keyword">end</span>
+
+ <span class="ruby-keyword">if</span> <span class="ruby-constant">String</span>.<span class="ruby-identifier">method_defined?</span>(<span class="ruby-value">:encoding</span>)
+ <span class="ruby-ivar">@preferred_data_encoding</span> = <span class="ruby-identifier">data_old</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">data_new</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-value">0</span>, <span class="ruby-string">&#39;&#39;</span>)).<span class="ruby-identifier">encoding</span>
+ <span class="ruby-keyword">end</span>
+
+ <span class="ruby-ivar">@data_old</span> = <span class="ruby-identifier">data_old</span>
+ <span class="ruby-ivar">@data_new</span> = <span class="ruby-identifier">data_new</span>
+
+ <span class="ruby-identifier">before</span> = <span class="ruby-identifier">after</span> = <span class="ruby-identifier">file_length_difference</span>
+ <span class="ruby-identifier">after</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">diff_size</span>
+ <span class="ruby-ivar">@file_length_difference</span> = <span class="ruby-identifier">after</span> <span class="ruby-comment"># The caller must get this manually</span>
+ <span class="ruby-ivar">@max_diff_size</span> = <span class="ruby-ivar">@blocks</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">diff_size</span>.<span class="ruby-identifier">abs</span> }.<span class="ruby-identifier">max</span>
+
+
+ <span class="ruby-comment"># Save the start &amp; end of each array. If the array doesn&#39;t exist (e.g.,</span>
+ <span class="ruby-comment"># we&#39;re only adding items in this block), then figure out the line number</span>
+ <span class="ruby-comment"># based on the line number of the other file and the current difference in</span>
+ <span class="ruby-comment"># file lengths.</span>
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">remove</span>.<span class="ruby-identifier">empty?</span>
+ <span class="ruby-identifier">a1</span> = <span class="ruby-identifier">a2</span> = <span class="ruby-keyword">nil</span>
+ <span class="ruby-keyword">else</span>
+ <span class="ruby-identifier">a1</span> = <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">remove</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">position</span>
+ <span class="ruby-identifier">a2</span> = <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">remove</span>[<span class="ruby-value">-1</span>].<span class="ruby-identifier">position</span>
+ <span class="ruby-keyword">end</span>
+
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">insert</span>.<span class="ruby-identifier">empty?</span>
+ <span class="ruby-identifier">b1</span> = <span class="ruby-identifier">b2</span> = <span class="ruby-keyword">nil</span>
+ <span class="ruby-keyword">else</span>
+ <span class="ruby-identifier">b1</span> = <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">insert</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">position</span>
+ <span class="ruby-identifier">b2</span> = <span class="ruby-ivar">@blocks</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">insert</span>[<span class="ruby-value">-1</span>].<span class="ruby-identifier">position</span>
+ <span class="ruby-keyword">end</span>
+
+ <span class="ruby-ivar">@start_old</span> = <span class="ruby-identifier">a1</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">b1</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">before</span>)
+ <span class="ruby-ivar">@start_new</span> = <span class="ruby-identifier">b1</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">a1</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">before</span>)
+ <span class="ruby-ivar">@end_old</span> = <span class="ruby-identifier">a2</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">b2</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">after</span>)
+ <span class="ruby-ivar">@end_new</span> = <span class="ruby-identifier">b2</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">a2</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">after</span>)
+
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">flag_context</span> = <span class="ruby-identifier">flag_context</span>
+<span class="ruby-keyword">end</span></pre>
+ </div>
+ </div>
+
+
+ </div>
+
+ </section>
+
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
+ <header>
+ <h3>Public Instance Methods</h3>
+ </header>
+
+ <div id="method-i-diff" class="method-detail ">
+ <div class="method-heading">
+ <span class="method-name">diff</span><span
+ class="method-args">(format, last = false)</span>
+ <span class="method-click-advice">click to toggle source</span>
+ </div>
+
+ <div class="method-description">
+ <p>Returns a diff string based on a format.</p>
+
+ <div class="method-source-code" id="diff-source">
+ <pre><span class="ruby-comment"># File lib/diff/lcs/hunk.rb, line 116</span>
+<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">diff</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">last</span> = <span class="ruby-keyword">false</span>)
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">format</span>
+ <span class="ruby-keyword">when</span> <span class="ruby-value">:old</span>
+ <span class="ruby-identifier">old_diff</span>(<span class="ruby-identifier">last</span>)
+ <span class="ruby-keyword">when</span> <span class="ruby-value">:unified</span>
+ <span class="ruby-identifier">unified_diff</span>(<span class="ruby-identifier">last</span>)
+ <span class="ruby-keyword">when</span> <span class="ruby-value">:context</span>
+ <span class="ruby-identifier">context_diff</span>(<span class="ruby-identifier">last</span>)
+ <span class="ruby-keyword">when</span> <span class="ruby-value">:ed</span>
+ <span class="ruby-keyword">self</span>
+ <span class="ruby-keyword">when</span> <span class="ruby-value">:reverse_ed</span>, <span class="ruby-value">:ed_finish</span>
+ <span class="ruby-identifier">ed_diff</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">last</span>)
+ <span class="ruby-keyword">else</span>
+ <span class="ruby-identifier">fail</span> <span class="ruby-node">&quot;Unknown diff format #{format}.&quot;</span>
+ <span class="ruby-keyword">end</span>
+<span class="ruby-keyword">end</span></pre>
+ </div>
+ </div>
+
+
+ </div>
+
+ <div id="method-i-merge" class="method-detail ">
+ <div class="method-heading">
+ <span class="method-name">merge</span><span
+ class="method-args">(hunk)</span>
+ <span class="method-click-advice">click to toggle source</span>
+ </div>
+
+ <div class="method-description">
+ <p>Merges this hunk and the provided hunk together if they overlap. Returns a truthy value so that if there is no overlap, you can know the merge was skipped.</p>
+
+ <div class="method-source-code" id="merge-source">
+ <pre><span class="ruby-comment"># File lib/diff/lcs/hunk.rb, line 98</span>
+<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">merge</span>(<span class="ruby-identifier">hunk</span>)
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">hunk</span>)
+
+ <span class="ruby-ivar">@start_old</span> = <span class="ruby-identifier">hunk</span>.<span class="ruby-identifier">start_old</span>
+ <span class="ruby-ivar">@start_new</span> = <span class="ruby-identifier">hunk</span>.<span class="ruby-identifier">start_new</span>
+ <span class="ruby-identifier">blocks</span>.<span class="ruby-identifier">unshift</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">hunk</span>.<span class="ruby-identifier">blocks</span>)
+<span class="ruby-keyword">end</span></pre>
+ </div>
+ </div>
+
+ <div class="aliases">
+ Also aliased as: <a href="Hunk.html#method-i-unshift">unshift</a>
+ </div>
+
+ </div>
+
+ <div id="method-i-missing_last_newline-3F" class="method-detail ">
+ <div class="method-heading">
+ <span class="method-name">missing_last_newline?</span><span
+ class="method-args">(data)</span>
+ <span class="method-click-advice">click to toggle source</span>
+ </div>
+
+ <div class="method-description">
+
+
+ <div class="method-source-code" id="missing_last_newline-3F-source">
+ <pre><span class="ruby-comment"># File lib/diff/lcs/hunk.rb, line 326</span>
+<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">missing_last_newline?</span>(<span class="ruby-identifier">data</span>)
+ <span class="ruby-identifier">newline</span> = <span class="ruby-identifier">encode</span>(<span class="ruby-string">&quot;\n&quot;</span>)
+
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>[<span class="ruby-value">-2</span>]
+ <span class="ruby-identifier">data</span>[<span class="ruby-value">-2</span>].<span class="ruby-identifier">end_with?</span>(<span class="ruby-identifier">newline</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">data</span>[<span class="ruby-value">-1</span>].<span class="ruby-identifier">end_with?</span>(<span class="ruby-identifier">newline</span>)
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">data</span>[<span class="ruby-value">-1</span>]
+ <span class="ruby-operator">!</span><span class="ruby-identifier">data</span>[<span class="ruby-value">-1</span>].<span class="ruby-identifier">end_with?</span>(<span class="ruby-identifier">newline</span>)
+ <span class="ruby-keyword">else</span>
+ <span class="ruby-keyword">true</span>
+ <span class="ruby-keyword">end</span>
+<span class="ruby-keyword">end</span></pre>
+ </div>
+ </div>
+
+
+ </div>
+
+ <div id="method-i-overlaps-3F" class="method-detail ">
+ <div class="method-heading">
+ <span class="method-name">overlaps?</span><span
+ class="method-args">(hunk)</span>
+ <span class="method-click-advice">click to toggle source</span>
+ </div>
+
+ <div class="method-description">
+ <p>Determines whether there is an overlap between this hunk and the provided hunk. This will be true if the difference between the two hunks start or end positions is within one position of each other.</p>
+
+ <div class="method-source-code" id="overlaps-3F-source">
+ <pre><span class="ruby-comment"># File lib/diff/lcs/hunk.rb, line 110</span>
+<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">overlaps?</span>(<span class="ruby-identifier">hunk</span>)
+ <span class="ruby-identifier">hunk</span> <span class="ruby-keyword">and</span> (((<span class="ruby-ivar">@start_old</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">hunk</span>.<span class="ruby-identifier">end_old</span>) <span class="ruby-operator">&lt;=</span> <span class="ruby-value">1</span>) <span class="ruby-keyword">or</span>
+ ((<span class="ruby-ivar">@start_new</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">hunk</span>.<span class="ruby-identifier">end_new</span>) <span class="ruby-operator">&lt;=</span> <span class="ruby-value">1</span>))
+<span class="ruby-keyword">end</span></pre>
+ </div>
+ </div>
+
+
+ </div>
+
+ <div id="method-i-unshift" class="method-detail method-alias">
+ <div class="method-heading">
+ <span class="method-name">unshift</span><span
+ class="method-args">(hunk)</span>
+ </div>
+
+ <div class="method-description">
+
+
+ </div>
+
+
+ <div class="aliases">
+ Alias for: <a href="Hunk.html#method-i-merge">merge</a>
+ </div>
+ </div>
+
+ </section>
+
+ </section>
+</main>
+
+
+<footer id="validator-badges" role="contentinfo">
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.3.3.
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
+</footer>
+