Commit 236752c5 authored by Ryan LeFevre's avatar Ryan LeFevre

More documentation completed

parent e6f04125
......@@ -81,4 +81,4 @@ preferred way of accessing most of the PSD&#39;s data.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">tree: </span><span class="nf">-&gt;</span> <span class="k">new</span> <span class="nx">PSD</span><span class="p">.</span><span class="nx">Node</span><span class="p">.</span><span class="nx">Root</span><span class="p">(</span><span class="nx">@</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:09 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
This diff is collapsed.
......@@ -78,4 +78,4 @@ type for the entire image.</p>
<span class="k">when</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span> <span class="k">then</span> <span class="nx">@parseZip</span><span class="p">()</span>
<span class="k">else</span> <span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span><span class="p">(</span><span class="nx">@endPos</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:04 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:54 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -10,4 +10,4 @@ a preset color profile.</p>
<span class="nv">b = </span><span class="nx">Util</span><span class="p">.</span><span class="nx">clamp</span> <span class="p">(</span><span class="mi">65535</span> <span class="o">-</span> <span class="p">(</span><span class="nx">y</span> <span class="o">*</span> <span class="p">(</span><span class="mi">255</span> <span class="o">-</span> <span class="nx">k</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="nx">k</span> <span class="o">&lt;&lt;</span> <span class="mi">8</span><span class="p">)))</span> <span class="o">&gt;&gt;</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span>
<span class="p">[</span><span class="nx">r</span><span class="p">,</span> <span class="nx">g</span><span class="p">,</span> <span class="nx">b</span><span class="p">]</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:04 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:54 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -170,4 +170,4 @@ Returns an object with an ID, a unit, and a value.</p>
<span class="nv">id: </span><span class="nx">unitId</span><span class="p">,</span> <span class="nv">unit: </span><span class="nx">unit</span><span class="p">,</span> <span class="nv">value: </span><span class="nx">value</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:04 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:54 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -75,4 +75,4 @@ given value, which effectively sets the position relative to the start of the fi
<span class="nb">parseFloat</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="nb">parseFloat</span><span class="p">(</span><span class="nx">b</span> <span class="o">/</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">pow</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">24</span><span class="p">),</span> <span class="mi">10</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:04 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:54 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -68,4 +68,4 @@ This is a mapping of that value to a human-readable name.</p>
<span class="nx">data</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:04 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -91,4 +91,4 @@ processed.</p>
<span class="vi">@channelData = </span><span class="kc">null</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:04 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -2,4 +2,4 @@
</td><td class="code"><div class="highlight"><pre><span class="nv">module.exports =</span>
<span class="nv">PNG: </span><span class="nx">require</span><span class="p">(</span><span class="s">&#39;./image_exports/png.coffee&#39;</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -16,4 +16,4 @@
<span class="p">.</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">fs</span><span class="p">.</span><span class="nx">createWriteStream</span><span class="p">(</span><span class="nx">output</span><span class="p">))</span>
<span class="p">.</span><span class="nx">on</span> <span class="s">&#39;finish&#39;</span><span class="p">,</span> <span class="nx">resolve</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -5,4 +5,4 @@
<span class="nv">LayerRLE: </span><span class="nx">require</span><span class="p">(</span><span class="s">&#39;./image_formats/layer_rle.coffee&#39;</span><span class="p">)</span>
<span class="nv">LayerRAW: </span><span class="nx">require</span><span class="p">(</span><span class="s">&#39;./image_formats/layer_raw.coffee&#39;</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -6,4 +6,4 @@
<span class="nx">@chanPos</span> <span class="o">+=</span> <span class="p">(</span><span class="nx">@chan</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -7,4 +7,4 @@
<span class="vi">@lineIndex = </span><span class="mi">0</span>
<span class="nx">@decodeRLEChannel</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -3,4 +3,4 @@
<span class="nv">parseRaw: </span><span class="nf">-&gt;</span>
<span class="vi">@channelData = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">read</span><span class="p">(</span><span class="nx">@length</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -34,4 +34,4 @@
<span class="nv">val = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">read</span><span class="p">(</span><span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="nx">@channelData</span><span class="p">[</span><span class="nx">@chanPos</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span> <span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">...</span><span class="nx">len</span><span class="p">]</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -4,4 +4,4 @@
<span class="nv">RGB: </span><span class="nx">require</span><span class="p">(</span><span class="s">&#39;./image_modes/rgb.coffee&#39;</span><span class="p">)</span>
<span class="nv">CMYK: </span><span class="nx">require</span><span class="p">(</span><span class="s">&#39;./image_modes/cmyk.coffee&#39;</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -33,4 +33,4 @@
<span class="p">[</span><span class="nx">r</span><span class="p">,</span> <span class="nx">g</span><span class="p">,</span> <span class="nx">b</span><span class="p">]</span> <span class="o">=</span> <span class="nx">Color</span><span class="p">.</span><span class="nx">cmykToRgb</span><span class="p">(</span><span class="mi">255</span> <span class="o">-</span> <span class="nx">c</span><span class="p">,</span> <span class="mi">255</span> <span class="o">-</span> <span class="nx">m</span><span class="p">,</span> <span class="mi">255</span> <span class="o">-</span> <span class="nx">y</span><span class="p">,</span> <span class="mi">255</span> <span class="o">-</span> <span class="nx">k</span><span class="p">)</span>
<span class="nx">@pixelData</span><span class="p">.</span><span class="nx">push</span> <span class="nx">r</span><span class="p">,</span> <span class="nx">g</span><span class="p">,</span> <span class="nx">b</span><span class="p">,</span> <span class="nx">a</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -14,4 +14,4 @@
<span class="nx">@pixelData</span><span class="p">.</span><span class="nx">push</span> <span class="nx">grey</span><span class="p">,</span> <span class="nx">grey</span><span class="p">,</span> <span class="nx">grey</span><span class="p">,</span> <span class="nx">alpha</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -29,4 +29,4 @@
<span class="nx">@pixelData</span><span class="p">.</span><span class="nx">push</span> <span class="nx">r</span><span class="p">,</span> <span class="nx">g</span><span class="p">,</span> <span class="nx">b</span><span class="p">,</span> <span class="nx">a</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:55 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -19,4 +19,4 @@ file path. This method also parses the PSD for you.</p>
<span class="nx">psd</span><span class="p">.</span><span class="nx">parse</span><span class="p">()</span>
<span class="nx">resolve</span><span class="p">(</span><span class="nx">psd</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:05 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:56 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -22,16 +22,18 @@ object, which simplifies access for you.</p>
<span class="vi">@blendMode = </span><span class="p">{}</span>
<span class="vi">@groupLayer = </span><span class="kc">null</span>
<span class="vi">@infoKeys = </span><span class="p">[]</span>
<span class="vi">@infoKeys = </span><span class="p">[]</span></pre></div></td></tr><tr id="section-4"><td class="docs"><div class="pilwrap"><a href="#section-4" class="pilcrow">&#182;</a></div><p>The layer&#39;s name can come from one of two places, depending on
what version of Photoshop was used to create the PSD.</p>
<span class="nb">Object</span><span class="p">.</span><span class="nx">defineProperty</span> <span class="nx">@</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span>
</td><td class="code"><div class="highlight"><pre> <span class="nb">Object</span><span class="p">.</span><span class="nx">defineProperty</span> <span class="nx">@</span><span class="p">,</span> <span class="s">&#39;name&#39;</span><span class="p">,</span>
<span class="nv">get: </span><span class="nf">-&gt;</span>
<span class="k">if</span> <span class="nx">@adjustments</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span><span class="o">?</span>
<span class="nx">@adjustments</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">].</span><span class="nx">data</span>
<span class="k">else</span>
<span class="nx">@legacyName</span>
<span class="nx">@legacyName</span></pre></div></td></tr><tr id="section-5"><td class="docs"><div class="pilwrap"><a href="#section-5" class="pilcrow">&#182;</a></div><p>Every layer starts with the same set of data, and ends with a dynamic
number of layer info blocks.</p>
<span class="nv">parse: </span><span class="nf">-&gt;</span>
</td><td class="code"><div class="highlight"><pre> <span class="nv">parse: </span><span class="nf">-&gt;</span>
<span class="nx">@parsePositionAndChannels</span><span class="p">()</span>
<span class="nx">@parseBlendModes</span><span class="p">()</span>
......@@ -59,4 +61,4 @@ object, which simplifies access for you.</p>
<span class="nv">clipped: </span><span class="nx">@clipped</span>
<span class="nv">mask: </span><span class="nx">@mask</span><span class="p">.</span><span class="nx">export</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:06 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:56 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
This diff is collapsed.
......@@ -10,4 +10,4 @@
<span class="p">.</span><span class="nx">later</span><span class="p">(</span><span class="s">&#39;parse&#39;</span><span class="p">)</span>
<span class="p">.</span><span class="nx">get</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:06 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:56 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -16,4 +16,4 @@
<span class="k">else</span>
<span class="nx">@name</span> <span class="o">is</span> <span class="s">&quot;&lt;/Layer group&gt;&quot;</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:06 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:56 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -8,4 +8,4 @@
<span class="nv">skip: </span><span class="nf">-&gt;</span> <span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="nx">@section_end</span>
<span class="nv">parse: </span><span class="nf">-&gt;</span> <span class="nx">@skip</span><span class="p">()</span> <span class="c1"># skip by default</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -8,4 +8,4 @@
<span class="vi">@enabled = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readBoolean</span><span class="p">()</span>
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">3</span><span class="p">,</span> <span class="kc">true</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:06 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:56 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -8,4 +8,4 @@
<span class="vi">@enabled = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readBoolean</span><span class="p">()</span>
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">3</span><span class="p">,</span> <span class="kc">true</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:06 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:56 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -7,4 +7,4 @@
<span class="nv">parse: </span><span class="nf">-&gt;</span>
<span class="vi">@value = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:06 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:56 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -9,4 +9,4 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">4</span><span class="p">,</span> <span class="kc">true</span> <span class="c1"># Skip sig</span>
<span class="vi">@data = </span><span class="k">new</span> <span class="nx">Descriptor</span><span class="p">(</span><span class="nx">@file</span><span class="p">).</span><span class="nx">parse</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:06 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -7,4 +7,4 @@
<span class="nv">parse: </span><span class="nf">-&gt;</span>
<span class="vi">@id = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:06 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -7,4 +7,4 @@
<span class="nv">parse: </span><span class="nf">-&gt;</span>
<span class="vi">@id = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readString</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -79,4 +79,4 @@
<span class="vi">@color = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readSpaceColor</span><span class="p">()</span>
<span class="vi">@antialias = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readBoolean</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -21,4 +21,4 @@
<span class="vi">@allLocked = </span><span class="nx">@transparencyLocked</span> <span class="o">and</span> <span class="nx">@compositeLocked</span> <span class="o">and</span> <span class="nx">@positionLocked</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -27,4 +27,4 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">4</span><span class="p">,</span> <span class="kc">true</span>
<span class="vi">@data.layerComp = </span><span class="k">new</span> <span class="nx">Descriptor</span><span class="p">(</span><span class="nx">@file</span><span class="p">).</span><span class="nx">parse</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -20,4 +20,4 @@ divider seems to solve a lot of parsing issues with folders.</p>
<span class="k">when</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span> <span class="k">then</span> <span class="vi">@isFolder = </span><span class="kc">true</span>
<span class="k">when</span> <span class="mi">3</span> <span class="k">then</span> <span class="vi">@isHidden = </span><span class="kc">true</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -9,4 +9,4 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">8</span><span class="p">,</span> <span class="kc">true</span>
<span class="vi">@data = </span><span class="k">new</span> <span class="nx">Descriptor</span><span class="p">(</span><span class="nx">@file</span><span class="p">).</span><span class="nx">parse</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -38,4 +38,4 @@
<span class="vi">@subType = </span><span class="k">if</span> <span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">()</span> <span class="o">is</span> <span class="mi">0</span> <span class="k">then</span> <span class="s">&#39;normal&#39;</span> <span class="k">else</span> <span class="s">&#39;scene group&#39;</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -21,4 +21,4 @@
<span class="nv">colorData: </span><span class="nf">-&gt;</span> <span class="nx">@data</span><span class="p">[</span><span class="s">&#39;Clr &#39;</span><span class="p">]</span>
<span class="nv">color: </span><span class="nf">-&gt;</span> <span class="p">[</span><span class="nx">@r</span><span class="p">,</span> <span class="nx">@g</span><span class="p">,</span> <span class="nx">@b</span><span class="p">]</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -118,4 +118,4 @@ Photoshop fonts.</p>
<span class="nv">bottom: </span><span class="nx">@coords</span><span class="p">.</span><span class="nx">bottom</span>
<span class="nv">transform: </span><span class="nx">@transform</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -11,4 +11,4 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="nx">pos</span> <span class="o">+</span> <span class="nx">@length</span>
<span class="k">return</span> <span class="nx">@</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -34,4 +34,4 @@
<span class="nv">disable: </span><span class="nx">@disable</span>
<span class="nv">paths: </span><span class="nx">@paths</span><span class="p">.</span><span class="nx">map</span> <span class="nf">(p) -&gt;</span> <span class="nx">p</span><span class="p">.</span><span class="nx">export</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:57 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -9,4 +9,4 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">8</span><span class="p">,</span> <span class="kc">true</span>
<span class="vi">@data = </span><span class="k">new</span> <span class="nx">Descriptor</span><span class="p">(</span><span class="nx">@file</span><span class="p">).</span><span class="nx">parse</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -9,4 +9,4 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">4</span><span class="p">,</span> <span class="kc">true</span>
<span class="vi">@data = </span><span class="k">new</span> <span class="nx">Descriptor</span><span class="p">(</span><span class="nx">@file</span><span class="p">).</span><span class="nx">parse</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:07 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -9,4 +9,4 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">8</span><span class="p">,</span> <span class="kc">true</span>
<span class="vi">@data = </span><span class="k">new</span> <span class="nx">Descriptor</span><span class="p">(</span><span class="nx">@file</span><span class="p">).</span><span class="nx">parse</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
......@@ -44,4 +44,4 @@
<span class="nv">disabled: </span><span class="nx">@disabled</span>
<span class="nv">invert: </span><span class="nx">@invert</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -97,4 +97,4 @@
<span class="vi">@bottom = </span><span class="nx">_</span><span class="p">.</span><span class="nx">max</span><span class="p">(</span><span class="nx">nonEmptyChildren</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nf">(c) -&gt;</span> <span class="nx">c</span><span class="p">.</span><span class="nx">bottom</span><span class="p">))</span> <span class="o">or</span> <span class="mi">0</span>
<span class="vi">@right = </span><span class="nx">_</span><span class="p">.</span><span class="nx">max</span><span class="p">(</span><span class="nx">nonEmptyChildren</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nf">(c) -&gt;</span> <span class="nx">c</span><span class="p">.</span><span class="nx">right</span><span class="p">))</span> <span class="o">or</span> <span class="mi">0</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -44,4 +44,4 @@
<span class="nv">path = </span><span class="nx">@ancestors</span><span class="p">().</span><span class="nx">map</span><span class="p">(</span><span class="nf">(n) -&gt;</span> <span class="nx">n</span><span class="p">.</span><span class="nx">name</span><span class="p">).</span><span class="nx">concat</span><span class="p">([</span><span class="nx">@name</span><span class="p">])</span>
<span class="k">if</span> <span class="nx">asArray</span> <span class="k">then</span> <span class="nx">path</span> <span class="k">else</span> <span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -3,4 +3,4 @@
<span class="nv">toPng: </span><span class="nf">-&gt;</span> <span class="nx">@layer</span><span class="p">.</span><span class="nx">image</span><span class="p">.</span><span class="nx">toPng</span><span class="p">()</span>
<span class="nv">saveAsPng: </span><span class="nf">(output) -&gt;</span> <span class="nx">@layer</span><span class="p">.</span><span class="nx">image</span><span class="p">.</span><span class="nx">saveAsPng</span><span class="p">(</span><span class="nx">output</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -16,4 +16,4 @@
<span class="nv">type: </span><span class="s">&#39;group&#39;</span>
<span class="nv">children: </span><span class="nx">@_children</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nf">(c) -&gt;</span> <span class="nx">c</span><span class="p">.</span><span class="nx">export</span><span class="p">())</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -14,4 +14,4 @@
<span class="nv">text: </span><span class="nx">@get</span><span class="p">(</span><span class="s">&#39;typeTool&#39;</span><span class="p">)</span><span class="o">?</span><span class="p">.</span><span class="nx">export</span><span class="p">()</span>
<span class="nv">image: </span><span class="p">{}</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -58,4 +58,4 @@
<span class="nx">@updateDimensions</span><span class="p">()</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -20,4 +20,4 @@
<span class="k">return</span> <span class="nx">_</span><span class="p">.</span><span class="nx">flatten</span> <span class="nx">matches</span><span class="p">.</span><span class="nx">map</span> <span class="nf">(m) -&gt;</span>
<span class="nx">m</span><span class="p">.</span><span class="nx">childrenAtPath</span><span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">clone</span><span class="p">(</span><span class="nx">path</span><span class="p">),</span> <span class="nx">opts</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -70,4 +70,4 @@
<span class="vi">@initialFill = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readShort</span><span class="p">()</span>
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">22</span><span class="p">,</span> <span class="kc">true</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:08 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -17,4 +17,4 @@
<span class="vi">@name = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readString</span><span class="p">(</span><span class="nx">nameLength</span><span class="p">)</span>
<span class="vi">@length = </span><span class="nx">Util</span><span class="p">.</span><span class="nx">pad2</span><span class="p">(</span><span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">())</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:09 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -13,4 +13,4 @@
<span class="kc">null</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:09 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -41,4 +41,4 @@
<span class="nv">byType: </span><span class="nf">(name) -&gt;</span> <span class="nx">@resources</span><span class="p">[</span><span class="nx">@typeIndex</span><span class="p">[</span><span class="nx">name</span><span class="p">]]</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:09 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -28,4 +28,4 @@
<span class="nv">name: </span><span class="nx">comp</span><span class="p">[</span><span class="s">&#39;Nm &#39;</span><span class="p">]</span>
<span class="nv">capturedInfo: </span><span class="nx">comp</span><span class="p">.</span><span class="nx">capturedInfo</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:09 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -21,4 +21,4 @@ to give the second byte</p>
<span class="nv">clamp: </span><span class="nf">(num, min, max) -&gt;</span>
<span class="nb">Math</span><span class="p">.</span><span class="nx">min</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nx">max</span><span class="p">(</span><span class="nx">num</span><span class="p">,</span> <span class="nx">min</span><span class="p">),</span> <span class="nx">max</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:09 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -42,4 +42,4 @@
<span class="nv">reader.onerror = </span><span class="nx">reject</span>
<span class="nx">reader</span><span class="p">.</span><span class="nx">readAsArrayBuffer</span><span class="p">(</span><span class="nx">file</span><span class="p">)</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:09 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -32,4 +32,4 @@ canvas data URL.</p>
<span class="nv">saveAsPng: </span><span class="nf">-&gt;</span>
<span class="k">throw</span> <span class="s">&quot;Not available in the browser. Use toPng() instead.&quot;</span>
</pre></div></td></tr></tbody></table><div id="generated">generated Mon May 11 2015 16:38:09 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
</pre></div></td></tr></tbody></table><div id="generated">generated Tue May 12 2015 10:08:59 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -24,6 +24,8 @@ module.exports = class Layer extends Module
@infoKeys = []
# The layer's name can come from one of two places, depending on
# what version of Photoshop was used to create the PSD.
Object.defineProperty @, 'name',
get: ->
if @adjustments['name']?
......@@ -31,6 +33,8 @@ module.exports = class Layer extends Module
else
@legacyName
# Every layer starts with the same set of data, and ends with a dynamic
# number of layer info blocks.
parse: ->
@parsePositionAndChannels()
@parseBlendModes()
......
BlendMode = require '../blend_mode.coffee'
module.exports =
# Every layer defines how it's blended with the rest of the document.
# This is represented in the Photoshop UI above the layer list as
# a drop down. It also defines the layer opacity and whether it's a
# part of a clipping mask.
parseBlendModes: ->
@blendMode = new BlendMode(@file)
@blendMode.parse()
......
module.exports =
# Blending ranges let you control which pixels from this layer and which
# pixels from the underlying layers appear in the final image. This describes
# the ranges in both greyscale and for each color channel.
parseBlendingRanges: ->
length = @file.readInt()
......
LazyExecute = require '../lazy_execute.coffee'
Util = require '../util.coffee'
# This is an incredibly important object because the majority of the layer information
# is contained in layer info blocks. The keys of this object define how the layer info
# can be accessed. Each layer info block contains different data, so accessing the data
# within each differs from type to type.
#
# Here's an example of how to access some of this data:
#
# ``` coffeescript
# node = psd.tree().childrenAtPath('path/to/layer')[0]
# node.get('locked').allLocked
# node.get('metadata').data.layerComp
# node.get('typeTool').export()
# ```
LAYER_INFO = {
blendClippingElements: require('../layer_info/blend_clipping_elements.coffee')
blendInteriorElements: require('../layer_info/blend_interior_elements.coffee')
......@@ -25,9 +38,12 @@ LAYER_INFO = {
module.exports =
parseLayerInfo: ->
# Layer info blocks are the last section in the layer, so we can continue until our
# file cursor reaches the end of the layer.
while @file.tell() < @layerEnd
@file.seek 4, true # sig
# Every layer info block is identified by a unique 4 character string.
key = @file.readString(4)
length = Util.pad2 @file.readInt()
pos = @file.tell()
......@@ -36,17 +52,24 @@ module.exports =
for own name, klass of LAYER_INFO
continue unless klass.shouldParse(key)
# Once we find the right class to handle the layer info block, we create it and
# register it with LazyExecute. This allows us to parse the PSD significantly
# faster because we don't bother parsing the layer info block until it's accessed.
i = new klass(@, length)
@adjustments[name] = new LazyExecute(i, @file)
.now('skip')
.later('parse')
.get()
# We create a function that lets us easily access the data.
unless @[name]?
do (name) => @[name] = => @adjustments[name]
# For debugging purposes, we store every key that we can parse.
@infoKeys.push key
keyParseable = true
break
# If we don't know how to parse this particular layer info block, we can skip it since we
# know the end position of the data.
@file.seek length, true if not keyParseable
Mask = require '../mask.coffee'
module.exports =
# Every layer has a mask section, whether or not the layer actually
# has a mask defined. If there is no mask, then the mask size will be
# 0 and we'll move on to the next thing.
parseMaskData: ->
@mask = new Mask(@file).parse()
Util = require '../util.coffee'
module.exports =
# Every Photoshop document has what we can consider to be the "legacy" name.
# This used to be the sole place that Photoshop stored the layer name, but once
# people started using fancy UTF-8 characters, they moved the layer name out into
# a layer info block. This stayed behind for compatibility reasons. The newer layer
# name is always preferred since it covers all possible characters (even emojis),
# while this has a much more limited character set.
parseLegacyLayerName: ->
len = Util.pad4 @file.readByte()
@legacyName = @file.readString(len)
module.exports =
# Every layer starts with the basics. Here we have the layer dimensions,
# the number of color channels for the image data, and information about
# the color channels.
parsePositionAndChannels: ->
@top = @file.readInt()
@left = @file.readInt()
......@@ -9,6 +12,9 @@ module.exports =
@rows = @height = @bottom - @top
@cols = @width = @right - @left
# Every color channel has both an ID and a length. The ID correlates to
# the color channel, e.g. 0 = R, 1 = G, 2 = B, -1 = A, and the length is
# the size of the data.
for i in [0...@channels]
id = @file.readShort()
length = @file.readInt()
......
......@@ -2,6 +2,16 @@ _ = require 'lodash'
Util = require './util.coffee'
Layer = require './layer.coffee'
# The layer mask is the overarching data structure that describes both
# the layers/groups in the PSD document, and the global mask.
# This part of the document is ordered as such:
#
# * Layers
# * Layer images
# * Global Mask
#
# The file does not need to have a global mask. If there is none, then
# its length will be zero.
module.exports = class LayerMask
constructor: (@file, @header) ->
@layers = []
......@@ -19,6 +29,8 @@ module.exports = class LayerMask
@parseLayers()
@parseGlobalMask()
# The layers are stored in the reverse order that we would like them. In other
# words, they're stored bottom to top and we want them top to bottom.
@layers.reverse()
@file.seek finish
......
# LazyExecute is very important when it comes to speed. Because some PSD documents
# can be extremely large and hold a LOT of data, we can significantly speed up
# parsing by temporarily skipping over chunks of the PSD. Chances are that you aren't
# going to use every piece of data in the document. This means, when you do request
# some data that's proxied through LazyExecute, we can parse it on the fly. This overhead
# should be incredibly minimal.
#
# While not as elegant as the PSD.rb counterpart, it gets the job done. We look at the
# object we need to proxy, and define proxies for every item on its prototype on this
# one. The proxy checks to see if the object has been loaded first before passing on
# the call to the object.
#
# If the object has not been loaded yet, we record our current position in the file, jump
# to the known start position of the data, parse it by calling a set method on the object,
# jump back to the original position in the file, and then call the proxied property.
#
# ## Example
# ``` coffeescript
# obj = new SomeObject()
# data = new LazyExecute(obj, file)
# .now('skip')
# .later('parse')
# .ignore('foo', 'bar')
# .get()
# ```
module.exports = class LazyExecute
constructor: (@obj, @file) ->
@startPos = @file.tell()
......@@ -6,19 +31,33 @@ module.exports = class LazyExecute
@loadArgs = []
@passthru = []
# This describes the method that we want to run at object instantiation. Typically this
# will skip over the data that we will parse on-demand later. We can pass any arguments
# we want to the method as well.
now: (method, args...) ->
@obj[method].apply(@obj, args)
return @
# Here we describe the method we want to run when the first method/property on the object
# is accessed. We can also define any arguments that need to be passed to the function.
later: (method, args...) ->
@loadMethod = method
@loadArgs = args
return @
# Sometimes we don't have to parse the data in order to get some important information.
# For example, we can get the widht/height from the full preview image without parsing the
# image itself, since that data comes from the header. Purely convenience, but helps to
# optimize usage.
#
# The arguments are a list of method/property names we don't want to trigger on-demand parsing.
ignore: (args...) ->
@passthru.concat args
return @
# This is called once all of the paramters of the proxy have been set up, i.e. now, later, and skip.
# This defines all items on the proxied objects prototype on this object, and checks to make sure
# the proxied object has been loaded before passing on the call.
get: ->
for key, val of @obj then do (key, val) =>
return if @[key]?
......@@ -29,6 +68,14 @@ module.exports = class LazyExecute
@
# If we are accessing a property for the first time, then this will call the load method, which
# was defined during setup with `later()`. The steps this performs are:
#
# 1. Records the current file position.
# 2. Jumps to the recorded start position for the proxied data.
# 3. Calls the load method, which was defined with `later()`.
# 4. Jumps back to the original file position.
# 5. Sets the `@loaded` flag to true so we know this object has been parsed.
load: ->
origPos = @file.tell()
@file.seek @startPos
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment