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
<!DOCTYPE html><html><head><title>blend_mode.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../index.html" class="source"><span class="file_name">README</span></a><a href="../../lib/psd/blend_mode.coffee.html" class="source selected"><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../lib/psd/lazy_execute.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>blend_mode.coffee</h1><div class="filepath">lib/psd/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
</td><td class="code"><div class="highlight"><pre></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>The blend mode describes important data regarding a layer, such as
</td><td class="code"><div class="highlight"><pre><span class="p">{</span><span class="nx">Module</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s">&#39;coffeescript-module&#39;</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>The blend mode describes important data regarding a layer, such as
the blending mode, the opacity, and whether it&#39;s a part of a clipping mask.</p>
</td><td class="code"><div class="highlight"><pre>undefined</pre></div></td></tr><tr id="section-3"><td class="docs"><div class="pilwrap"><a href="#section-3" class="pilcrow">&#182;</a></div><p>All of the blend modes are stored in the PSD file with a specific key.
</td><td class="code"><div class="highlight"><pre><span class="nv">module.exports = </span><span class="k">class</span> <span class="nx">BlendMode</span> <span class="k">extends</span> <span class="nx">Module</span>
<span class="nx">@aliasProperty</span> <span class="s">&#39;blendingMode&#39;</span><span class="p">,</span> <span class="s">&#39;mode&#39;</span></pre></div></td></tr><tr id="section-3"><td class="docs"><div class="pilwrap"><a href="#section-3" class="pilcrow">&#182;</a></div><p>All of the blend modes are stored in the PSD file with a specific key.
This is the mapping of that key to its readable name.</p>
</td><td class="code"><div class="highlight"><pre>undefined</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 4 character key for the blending mode.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">BLEND_MODES = </span><span class="p">{</span>
<span class="nv">norm: </span><span class="s">&#39;normal&#39;</span><span class="p">,</span>
<span class="nv">dark: </span><span class="s">&#39;darken&#39;</span><span class="p">,</span>
<span class="nv">lite: </span><span class="s">&#39;lighten&#39;</span><span class="p">,</span>
<span class="nv">hue: </span> <span class="s">&#39;hue&#39;</span><span class="p">,</span>
<span class="nv">sat: </span> <span class="s">&#39;saturation&#39;</span><span class="p">,</span>
<span class="nv">colr: </span><span class="s">&#39;color&#39;</span><span class="p">,</span>
<span class="nv">lum: </span> <span class="s">&#39;luminosity&#39;</span><span class="p">,</span>
<span class="nv">mul: </span> <span class="s">&#39;multiply&#39;</span><span class="p">,</span>
<span class="nv">scrn: </span><span class="s">&#39;screen&#39;</span><span class="p">,</span>
<span class="nv">diss: </span><span class="s">&#39;dissolve&#39;</span><span class="p">,</span>
<span class="nv">over: </span><span class="s">&#39;overlay&#39;</span><span class="p">,</span>
<span class="nv">hLit: </span><span class="s">&#39;hard_light&#39;</span><span class="p">,</span>
<span class="nv">sLit: </span><span class="s">&#39;soft_light&#39;</span><span class="p">,</span>
<span class="nv">diff: </span><span class="s">&#39;difference&#39;</span><span class="p">,</span>
<span class="nv">smud: </span><span class="s">&#39;exclusion&#39;</span><span class="p">,</span>
<span class="nv">div: </span> <span class="s">&#39;color_dodge&#39;</span><span class="p">,</span>
<span class="nv">idiv: </span><span class="s">&#39;color_burn&#39;</span><span class="p">,</span>
<span class="nv">lbrn: </span><span class="s">&#39;linear_burn&#39;</span><span class="p">,</span>
<span class="nv">lddg: </span><span class="s">&#39;linear_dodge&#39;</span><span class="p">,</span>
<span class="nv">vLit: </span><span class="s">&#39;vivid_light&#39;</span><span class="p">,</span>
<span class="nv">lLit: </span><span class="s">&#39;linear_light&#39;</span><span class="p">,</span>
<span class="nv">pLit: </span><span class="s">&#39;pin_light&#39;</span><span class="p">,</span>
<span class="nv">hMix: </span><span class="s">&#39;hard_mix&#39;</span><span class="p">,</span>
<span class="nv">pass: </span><span class="s">&#39;passthru&#39;</span><span class="p">,</span>
<span class="nv">dkCl: </span><span class="s">&#39;darker_color&#39;</span><span class="p">,</span>
<span class="nv">lgCl: </span><span class="s">&#39;lighter_color&#39;</span><span class="p">,</span>
<span class="nv">fsub: </span><span class="s">&#39;subtract&#39;</span><span class="p">,</span>
<span class="nv">fdiv: </span><span class="s">&#39;divide&#39;</span>
<span class="p">}</span>
</td><td class="code"><div class="highlight"><pre>undefined</pre></div></td></tr><tr id="section-5"><td class="docs"><div class="pilwrap"><a href="#section-5" class="pilcrow">&#182;</a></div><p>The opacity of the layer, from [0, 255].</p>
<span class="nv">constructor: </span><span class="nf">(@file) -&gt;</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 4 character key for the blending mode.</p>
</td><td class="code"><div class="highlight"><pre>undefined</pre></div></td></tr><tr id="section-6"><td class="docs"><div class="pilwrap"><a href="#section-6" class="pilcrow">&#182;</a></div><p>Raw value for the clipping state of this layer.</p>
</td><td class="code"><div class="highlight"><pre> <span class="vi">@blendKey = </span><span class="kc">null</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>The opacity of the layer, from [0, 255].</p>
</td><td class="code"><div class="highlight"><pre>undefined</pre></div></td></tr><tr id="section-7"><td class="docs"><div class="pilwrap"><a href="#section-7" class="pilcrow">&#182;</a></div><p>Is this layer a clipping mask?</p>
</td><td class="code"><div class="highlight"><pre> <span class="vi">@opacity = </span><span class="kc">null</span></pre></div></td></tr><tr id="section-6"><td class="docs"><div class="pilwrap"><a href="#section-6" class="pilcrow">&#182;</a></div><p>Raw value for the clipping state of this layer.</p>
</td><td class="code"><div class="highlight"><pre>undefined</pre></div></td></tr><tr id="section-8"><td class="docs"><div class="pilwrap"><a href="#section-8" class="pilcrow">&#182;</a></div><p>The readable representation of the blend mode.</p>
</td><td class="code"><div class="highlight"><pre> <span class="vi">@clipping = </span><span class="kc">null</span></pre></div></td></tr><tr id="section-7"><td class="docs"><div class="pilwrap"><a href="#section-7" class="pilcrow">&#182;</a></div><p>Is this layer a clipping mask?</p>
</td><td class="code"><div class="highlight"><pre>undefined</pre></div></td></tr><tr id="section-9"><td class="docs"><div class="pilwrap"><a href="#section-9" class="pilcrow">&#182;</a></div><p>Is this layer visible?</p>
</td><td class="code"><div class="highlight"><pre> <span class="vi">@clipped = </span><span class="kc">null</span>
<span class="vi">@flags = </span><span class="kc">null</span></pre></div></td></tr><tr id="section-8"><td class="docs"><div class="pilwrap"><a href="#section-8" class="pilcrow">&#182;</a></div><p>The readable representation of the blend mode.</p>
</td><td class="code"><div class="highlight"><pre>undefined</pre></div></td></tr><tr id="section-10"><td class="docs"><div class="pilwrap"><a href="#section-10" class="pilcrow">&#182;</a></div><p>Parses the blend mode data.</p>
</td><td class="code"><div class="highlight"><pre> <span class="vi">@mode = </span><span class="kc">null</span></pre></div></td></tr><tr id="section-9"><td class="docs"><div class="pilwrap"><a href="#section-9" class="pilcrow">&#182;</a></div><p>Is this layer visible?</p>
</td><td class="code"><div class="highlight"><pre>undefined</pre></div></td></tr><tr id="section-11"><td class="docs"><div class="pilwrap"><a href="#section-11" class="pilcrow">&#182;</a></div><p>Returns the layer opacity as a percentage.</p>
</td><td class="code"><div class="highlight"><pre> <span class="vi">@visible = </span><span class="kc">null</span></pre></div></td></tr><tr id="section-10"><td class="docs"><div class="pilwrap"><a href="#section-10" class="pilcrow">&#182;</a></div><p>Parses the blend mode data.</p>
</td><td class="code"><div class="highlight"><pre>undefined</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
</td><td class="code"><div class="highlight"><pre> <span class="nv">parse: </span><span class="nf">-&gt;</span>
<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">@blendKey = </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><span class="nx">trim</span><span class="p">()</span>
<span class="vi">@opacity = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">()</span>
<span class="vi">@clipping = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">()</span>
<span class="vi">@flags = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">()</span>
<span class="vi">@mode = </span><span class="nx">BLEND_MODES</span><span class="p">[</span><span class="nx">@blendKey</span><span class="p">]</span>
<span class="vi">@clipped = </span><span class="nx">@clipping</span> <span class="o">is</span> <span class="mi">1</span>
<span class="vi">@visible = </span><span class="o">!</span><span class="p">((</span><span class="nx">@flags</span> <span class="o">&amp;</span> <span class="p">(</span><span class="mh">0x01</span> <span class="o">&lt;&lt;</span> <span class="mi">1</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span>
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span></pre></div></td></tr><tr id="section-11"><td class="docs"><div class="pilwrap"><a href="#section-11" class="pilcrow">&#182;</a></div><p>Returns the layer opacity as a percentage.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">opacityPercentage: </span><span class="nf">-&gt;</span> <span class="nx">@opacity</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">/</span> <span class="mi">255</span>
</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
......@@ -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
<!DOCTYPE html><html><head><title>blend_modes.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../../index.html" class="source"><span class="file_name">README</span></a><a href="../../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../../lib/psd/layer/blend_modes.coffee.html" class="source selected"><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../../lib/psd/lazy_execute.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>blend_modes.coffee</h1><div class="filepath">lib/psd/layer/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
</td><td class="code"><div class="highlight"><pre><span class="nv">BlendMode = </span><span class="nx">require</span> <span class="s">&#39;../blend_mode.coffee&#39;</span>
<span class="nv">module.exports =</span>
<span class="nv">parseBlendModes: </span><span class="nf">-&gt;</span>
<span class="nv">module.exports =</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>Every layer defines how it&#39;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&#39;s a
part of a clipping mask.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">parseBlendModes: </span><span class="nf">-&gt;</span>
<span class="vi">@blendMode = </span><span class="k">new</span> <span class="nx">BlendMode</span><span class="p">(</span><span class="nx">@file</span><span class="p">)</span>
<span class="nx">@blendMode</span><span class="p">.</span><span class="nx">parse</span><span class="p">()</span>
......@@ -10,9 +14,9 @@
<span class="vi">@visible = </span><span class="nx">@blendMode</span><span class="p">.</span><span class="nx">visible</span>
<span class="vi">@clipped = </span><span class="nx">@blendMode</span><span class="p">.</span><span class="nx">clipped</span>
<span class="nv">hidden: </span><span class="nf">-&gt;</span> <span class="o">not</span> <span class="nx">@visible</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>TODO: check section divider</p>
<span class="nv">hidden: </span><span class="nf">-&gt;</span> <span class="o">not</span> <span class="nx">@visible</span></pre></div></td></tr><tr id="section-3"><td class="docs"><div class="pilwrap"><a href="#section-3" class="pilcrow">&#182;</a></div><p>TODO: check section divider</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">blendingMode: </span><span class="nf">-&gt;</span>
<span class="nx">@blendMode</span><span class="p">.</span><span class="nx">mode</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
<!DOCTYPE html><html><head><title>blending_ranges.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../../index.html" class="source"><span class="file_name">README</span></a><a href="../../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../../lib/psd/layer/blending_ranges.coffee.html" class="source selected"><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../../lib/psd/lazy_execute.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>blending_ranges.coffee</h1><div class="filepath">lib/psd/layer/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
</td><td class="code"><div class="highlight"><pre><span class="nv">module.exports =</span>
<span class="nv">parseBlendingRanges: </span><span class="nf">-&gt;</span>
</td><td class="code"><div class="highlight"><pre><span class="nv">module.exports =</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>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.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">parseBlendingRanges: </span><span class="nf">-&gt;</span>
<span class="nv">length = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">()</span>
<span class="vi">@blendingRanges.grey =</span>
......@@ -23,4 +26,4 @@
<span class="nv">black: </span><span class="p">[</span><span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">(),</span> <span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">()]</span>
<span class="nv">white: </span><span class="p">[</span><span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">(),</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
......@@ -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
<!DOCTYPE html><html><head><title>info.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../../index.html" class="source"><span class="file_name">README</span></a><a href="../../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../../lib/psd/layer/info.coffee.html" class="source selected"><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../../lib/psd/lazy_execute.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>info.coffee</h1><div class="filepath">lib/psd/layer/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
</td><td class="code"><div class="highlight"><pre><span class="nv">LazyExecute = </span><span class="nx">require</span> <span class="s">&#39;../lazy_execute.coffee&#39;</span>
<span class="nv">Util = </span><span class="nx">require</span> <span class="s">&#39;../util.coffee&#39;</span>
<span class="nv">Util = </span><span class="nx">require</span> <span class="s">&#39;../util.coffee&#39;</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>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.</p>
<p>Here&#39;s an example of how to access some of this data:</p>
<pre><code class="lang-coffeescript">node = psd.tree().childrenAtPath(&#39;path/to/layer&#39;)[0]
node.get(&#39;locked&#39;).allLocked
node.get(&#39;metadata&#39;).data.layerComp
node.get(&#39;typeTool&#39;).export()
</code></pre>
<span class="nv">LAYER_INFO = </span><span class="p">{</span>
</td><td class="code"><div class="highlight"><pre><span class="nv">LAYER_INFO = </span><span class="p">{</span>
<span class="nv">blendClippingElements: </span> <span class="nx">require</span><span class="p">(</span><span class="s">&#39;../layer_info/blend_clipping_elements.coffee&#39;</span><span class="p">)</span>
<span class="nv">blendInteriorElements: </span> <span class="nx">require</span><span class="p">(</span><span class="s">&#39;../layer_info/blend_interior_elements.coffee&#39;</span><span class="p">)</span>
<span class="nv">fillOpacity: </span> <span class="nx">require</span><span class="p">(</span><span class="s">&#39;../layer_info/fill_opacity.coffee&#39;</span><span class="p">)</span>
......@@ -25,31 +34,36 @@
<span class="p">}</span>
<span class="nv">module.exports =</span>
<span class="nv">parseLayerInfo: </span><span class="nf">-&gt;</span>
<span class="k">while</span> <span class="nx">@file</span><span class="p">.</span><span class="nx">tell</span><span class="p">()</span> <span class="o">&lt;</span> <span class="nx">@layerEnd</span>
<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"># sig</span>
<span class="nv">parseLayerInfo: </span><span class="nf">-&gt;</span></pre></div></td></tr><tr id="section-3"><td class="docs"><div class="pilwrap"><a href="#section-3" class="pilcrow">&#182;</a></div><p>Layer info blocks are the last section in the layer, so we can continue until our
file cursor reaches the end of the layer.</p>
<span class="nv">key = </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>
</td><td class="code"><div class="highlight"><pre> <span class="k">while</span> <span class="nx">@file</span><span class="p">.</span><span class="nx">tell</span><span class="p">()</span> <span class="o">&lt;</span> <span class="nx">@layerEnd</span>
<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"># sig</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>Every layer info block is identified by a unique 4 character string.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">key = </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>
<span class="nv">length = </span><span class="nx">Util</span><span class="p">.</span><span class="nx">pad2</span> <span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">()</span>
<span class="nv">pos = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">tell</span><span class="p">()</span>
<span class="nv">keyParseable = </span><span class="kc">false</span>
<span class="k">for</span> <span class="k">own</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">klass</span> <span class="k">of</span> <span class="nx">LAYER_INFO</span>
<span class="k">continue</span> <span class="k">unless</span> <span class="nx">klass</span><span class="p">.</span><span class="nx">shouldParse</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span>
<span class="k">continue</span> <span class="k">unless</span> <span class="nx">klass</span><span class="p">.</span><span class="nx">shouldParse</span><span class="p">(</span><span class="nx">key</span><span class="p">)</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>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&#39;t bother parsing the layer info block until it&#39;s accessed.</p>
<span class="nv">i = </span><span class="k">new</span> <span class="nx">klass</span><span class="p">(</span><span class="nx">@</span><span class="p">,</span> <span class="nx">length</span><span class="p">)</span>
</td><td class="code"><div class="highlight"><pre> <span class="nv">i = </span><span class="k">new</span> <span class="nx">klass</span><span class="p">(</span><span class="nx">@</span><span class="p">,</span> <span class="nx">length</span><span class="p">)</span>
<span class="nx">@adjustments</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">LazyExecute</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="nx">@file</span><span class="p">)</span>
<span class="p">.</span><span class="nx">now</span><span class="p">(</span><span class="s">&#39;skip&#39;</span><span class="p">)</span>
<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>
<span class="p">.</span><span class="nx">get</span><span class="p">()</span></pre></div></td></tr><tr id="section-6"><td class="docs"><div class="pilwrap"><a href="#section-6" class="pilcrow">&#182;</a></div><p>We create a function that lets us easily access the data.</p>
<span class="k">unless</span> <span class="nx">@</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span><span class="o">?</span>
<span class="nx">do</span> <span class="nf">(name) =&gt;</span> <span class="nx">@</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nf">=&gt;</span> <span class="nx">@adjustments</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span>
</td><td class="code"><div class="highlight"><pre> <span class="k">unless</span> <span class="nx">@</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span><span class="o">?</span>
<span class="nx">do</span> <span class="nf">(name) =&gt;</span> <span class="nx">@</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nf">=&gt;</span> <span class="nx">@adjustments</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span></pre></div></td></tr><tr id="section-7"><td class="docs"><div class="pilwrap"><a href="#section-7" class="pilcrow">&#182;</a></div><p>For debugging purposes, we store every key that we can parse.</p>
<span class="nx">@infoKeys</span><span class="p">.</span><span class="nx">push</span> <span class="nx">key</span>
</td><td class="code"><div class="highlight"><pre> <span class="nx">@infoKeys</span><span class="p">.</span><span class="nx">push</span> <span class="nx">key</span>
<span class="nv">keyParseable = </span><span class="kc">true</span>
<span class="k">break</span>
<span class="k">break</span></pre></div></td></tr><tr id="section-8"><td class="docs"><div class="pilwrap"><a href="#section-8" class="pilcrow">&#182;</a></div><p>If we don&#39;t know how to parse this particular layer info block, we can skip it since we
know the end position of the data.</p>
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="nx">length</span><span class="p">,</span> <span class="kc">true</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">keyParseable</span>
</td><td class="code"><div class="highlight"><pre> <span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="nx">length</span><span class="p">,</span> <span class="kc">true</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">keyParseable</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
<!DOCTYPE html><html><head><title>mask.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../../index.html" class="source"><span class="file_name">README</span></a><a href="../../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../../lib/psd/layer/mask.coffee.html" class="source selected"><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../../lib/psd/lazy_execute.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>mask.coffee</h1><div class="filepath">lib/psd/layer/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
</td><td class="code"><div class="highlight"><pre><span class="nv">Mask = </span><span class="nx">require</span> <span class="s">&#39;../mask.coffee&#39;</span>
<span class="nv">module.exports =</span>
<span class="nv">parseMaskData: </span><span class="nf">-&gt;</span>
<span class="nv">module.exports =</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>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&#39;ll move on to the next thing.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">parseMaskData: </span><span class="nf">-&gt;</span>
<span class="vi">@mask = </span><span class="k">new</span> <span class="nx">Mask</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:56 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><title>name.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../../index.html" class="source"><span class="file_name">README</span></a><a href="../../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/layer/name.coffee.html" class="source selected"><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../../lib/psd/lazy_execute.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>name.coffee</h1><div class="filepath">lib/psd/layer/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
</td><td class="code"><div class="highlight"><pre><span class="nv">Util = </span><span class="nx">require</span> <span class="s">&#39;../util.coffee&#39;</span>
<span class="nv">module.exports =</span>
<span class="nv">parseLegacyLayerName: </span><span class="nf">-&gt;</span>
<span class="nv">module.exports =</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>Every Photoshop document has what we can consider to be the &quot;legacy&quot; 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.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">parseLegacyLayerName: </span><span class="nf">-&gt;</span>
<span class="nv">len = </span><span class="nx">Util</span><span class="p">.</span><span class="nx">pad4</span> <span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">()</span>
<span class="vi">@legacyName = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readString</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: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
<!DOCTYPE html><html><head><title>position_channels.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../../index.html" class="source"><span class="file_name">README</span></a><a href="../../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../../lib/psd/layer/position_channels.coffee.html" class="source selected"><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../../lib/psd/lazy_execute.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>position_channels.coffee</h1><div class="filepath">lib/psd/layer/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
</td><td class="code"><div class="highlight"><pre><span class="nv">module.exports =</span>
<span class="nv">parsePositionAndChannels: </span><span class="nf">-&gt;</span>
</td><td class="code"><div class="highlight"><pre><span class="nv">module.exports =</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>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.</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">parsePositionAndChannels: </span><span class="nf">-&gt;</span>
<span class="vi">@top = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">()</span>
<span class="vi">@left = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">()</span>
<span class="vi">@bottom = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">()</span>
......@@ -8,12 +11,14 @@
<span class="vi">@channels = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readShort</span><span class="p">()</span>
<span class="vi">@rows = @height = </span><span class="nx">@bottom</span> <span class="o">-</span> <span class="nx">@top</span>
<span class="vi">@cols = @width = </span><span class="nx">@right</span> <span class="o">-</span> <span class="nx">@left</span>
<span class="vi">@cols = @width = </span><span class="nx">@right</span> <span class="o">-</span> <span class="nx">@left</span></pre></div></td></tr><tr id="section-3"><td class="docs"><div class="pilwrap"><a href="#section-3" class="pilcrow">&#182;</a></div><p>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.</p>
<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">@channels</span><span class="p">]</span>
</td><td class="code"><div class="highlight"><pre> <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">@channels</span><span class="p">]</span>
<span class="nv">id = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readShort</span><span class="p">()</span>
<span class="nv">length = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readInt</span><span class="p">()</span>
<span class="nx">@channelsInfo</span><span class="p">.</span><span class="nx">push</span> <span class="nv">id: </span><span class="nx">id</span><span class="p">,</span> <span class="nv">length: </span><span class="nx">length</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="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
<!DOCTYPE html><html><head><title>layer_mask.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../index.html" class="source"><span class="file_name">README</span></a><a href="../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../lib/psd/layer_mask.coffee.html" class="source selected"><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../lib/psd/lazy_execute.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>layer_mask.coffee</h1><div class="filepath">lib/psd/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
</td><td class="code"><div class="highlight"><pre><span class="nv">_ = </span><span class="nx">require</span> <span class="s">&#39;lodash&#39;</span>
<span class="nv">Util = </span><span class="nx">require</span> <span class="s">&#39;./util.coffee&#39;</span>
<span class="nv">Layer = </span><span class="nx">require</span> <span class="s">&#39;./layer.coffee&#39;</span>
<span class="nv">module.exports = </span><span class="k">class</span> <span class="nx">LayerMask</span>
<span class="nv">Layer = </span><span class="nx">require</span> <span class="s">&#39;./layer.coffee&#39;</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>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:</p>
<ul>
<li>Layers</li>
<li>Layer images</li>
<li>Global Mask</li>
</ul>
<p>The file does not need to have a global mask. If there is none, then
its length will be zero.</p>
</td><td class="code"><div class="highlight"><pre><span class="nv">module.exports = </span><span class="k">class</span> <span class="nx">LayerMask</span>
<span class="nv">constructor: </span><span class="nf">(@file, @header) -&gt;</span>
<span class="vi">@layers = </span><span class="p">[]</span>
<span class="vi">@mergedAlpha = </span><span class="kc">false</span>
......@@ -18,9 +27,10 @@
<span class="k">return</span> <span class="k">if</span> <span class="nx">maskSize</span> <span class="o">&lt;=</span> <span class="mi">0</span>
<span class="nx">@parseLayers</span><span class="p">()</span>
<span class="nx">@parseGlobalMask</span><span class="p">()</span>
<span class="nx">@parseGlobalMask</span><span class="p">()</span></pre></div></td></tr><tr id="section-3"><td class="docs"><div class="pilwrap"><a href="#section-3" class="pilcrow">&#182;</a></div><p>The layers are stored in the reverse order that we would like them. In other
words, they&#39;re stored bottom to top and we want them top to bottom.</p>
<span class="nx">@layers</span><span class="p">.</span><span class="nx">reverse</span><span class="p">()</span>
</td><td class="code"><div class="highlight"><pre> <span class="nx">@layers</span><span class="p">.</span><span class="nx">reverse</span><span class="p">()</span>
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="nx">finish</span>
......@@ -54,10 +64,10 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">readShort</span><span class="p">()</span> <span class="o">&gt;&gt;</span> <span class="mi">8</span>
<span class="p">]</span>
<span class="nv">mask.opacity = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readShort</span><span class="p">()</span> <span class="o">/</span> <span class="mf">16.0</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>0 = color selected, 1 = color protected, 128 = use value per layer</p>
<span class="nv">mask.opacity = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readShort</span><span class="p">()</span> <span class="o">/</span> <span class="mf">16.0</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>0 = color selected, 1 = color protected, 128 = use value per layer</p>
</td><td class="code"><div class="highlight"><pre> <span class="nv">mask.kind = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">readByte</span><span class="p">()</span>
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="nx">maskEnd</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
<!DOCTYPE html><html><head><title>lazy_execute.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../index.html" class="source"><span class="file_name">README</span></a><a href="../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../lib/psd/lazy_execute.coffee.html" class="source selected"><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>lazy_execute.coffee</h1><div class="filepath">lib/psd/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div>
<!DOCTYPE html><html><head><title>lazy_execute.coffee</title><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><link rel="stylesheet" media="all" href="../../docco.css"></head><body><div id="container"><div id="background"></div><div id="jump_to">Jump To &hellip;<div id="jump_wrapper"><div id="jump_page"><a href="../../index.html" class="source"><span class="file_name">README</span></a><a href="../../lib/psd/blend_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">blend_mode.coffee</span></a><a href="../../lib/psd/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">channel_image.coffee</span></a><a href="../../lib/psd/color.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">color.coffee</span></a><a href="../../lib/psd/descriptor.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">descriptor.coffee</span></a><a href="../../lib/psd/file.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">file.coffee</span></a><a href="../../lib/psd/header.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">header.coffee</span></a><a href="../../lib/psd/image.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image.coffee</span></a><a href="../../lib/psd/image_export.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_export.coffee</span></a><a href="../../lib/psd/image_exports/png.coffee.html" class="source "><span class="base_path">lib / psd / image_exports / </span><span class="file_name">png.coffee</span></a><a href="../../lib/psd/image_format.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_format.coffee</span></a><a href="../../lib/psd/image_formats/layer_raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_raw.coffee</span></a><a href="../../lib/psd/image_formats/layer_rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">layer_rle.coffee</span></a><a href="../../lib/psd/image_formats/raw.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">raw.coffee</span></a><a href="../../lib/psd/image_formats/rle.coffee.html" class="source "><span class="base_path">lib / psd / image_formats / </span><span class="file_name">rle.coffee</span></a><a href="../../lib/psd/image_mode.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">image_mode.coffee</span></a><a href="../../lib/psd/image_modes/cmyk.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">cmyk.coffee</span></a><a href="../../lib/psd/image_modes/greyscale.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">greyscale.coffee</span></a><a href="../../lib/psd/image_modes/rgb.coffee.html" class="source "><span class="base_path">lib / psd / image_modes / </span><span class="file_name">rgb.coffee</span></a><a href="../../lib/psd/init.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">init.coffee</span></a><a href="../../lib/psd/layer/blend_modes.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blend_modes.coffee</span></a><a href="../../lib/psd/layer/blending_ranges.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">blending_ranges.coffee</span></a><a href="../../lib/psd/layer/channel_image.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">channel_image.coffee</span></a><a href="../../lib/psd/layer/helpers.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">helpers.coffee</span></a><a href="../../lib/psd/layer/info.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">info.coffee</span></a><a href="../../lib/psd/layer/mask.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">mask.coffee</span></a><a href="../../lib/psd/layer/name.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">name.coffee</span></a><a href="../../lib/psd/layer/position_channels.coffee.html" class="source "><span class="base_path">lib / psd / layer / </span><span class="file_name">position_channels.coffee</span></a><a href="../../lib/psd/layer.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer.coffee</span></a><a href="../../lib/psd/layer_info/blend_clipping_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_clipping_elements.coffee</span></a><a href="../../lib/psd/layer_info/blend_interior_elements.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">blend_interior_elements.coffee</span></a><a href="../../lib/psd/layer_info/fill_opacity.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">fill_opacity.coffee</span></a><a href="../../lib/psd/layer_info/gradient_fill.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">gradient_fill.coffee</span></a><a href="../../lib/psd/layer_info/layer_id.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_id.coffee</span></a><a href="../../lib/psd/layer_info/layer_name_source.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">layer_name_source.coffee</span></a><a href="../../lib/psd/layer_info/legacy_typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">legacy_typetool.coffee</span></a><a href="../../lib/psd/layer_info/locked.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">locked.coffee</span></a><a href="../../lib/psd/layer_info/metadata.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">metadata.coffee</span></a><a href="../../lib/psd/layer_info/nested_section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">nested_section_divider.coffee</span></a><a href="../../lib/psd/layer_info/object_effects.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">object_effects.coffee</span></a><a href="../../lib/psd/layer_info/section_divider.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">section_divider.coffee</span></a><a href="../../lib/psd/layer_info/solid_color.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">solid_color.coffee</span></a><a href="../../lib/psd/layer_info/typetool.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">typetool.coffee</span></a><a href="../../lib/psd/layer_info/unicode_name.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">unicode_name.coffee</span></a><a href="../../lib/psd/layer_info/vector_mask.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_mask.coffee</span></a><a href="../../lib/psd/layer_info/vector_origination.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_origination.coffee</span></a><a href="../../lib/psd/layer_info/vector_stroke.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke.coffee</span></a><a href="../../lib/psd/layer_info/vector_stroke_content.coffee.html" class="source "><span class="base_path">lib / psd / layer_info / </span><span class="file_name">vector_stroke_content.coffee</span></a><a href="../../lib/psd/layer_info.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_info.coffee</span></a><a href="../../lib/psd/layer_mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">layer_mask.coffee</span></a><a href="../../lib/psd/lazy_execute.coffee.html" class="source selected"><span class="base_path">lib / psd / </span><span class="file_name">lazy_execute.coffee</span></a><a href="../../lib/psd/mask.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">mask.coffee</span></a><a href="../../lib/psd/node.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">node.coffee</span></a><a href="../../lib/psd/nodes/ancestry.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">ancestry.coffee</span></a><a href="../../lib/psd/nodes/build_preview.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">build_preview.coffee</span></a><a href="../../lib/psd/nodes/group.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">group.coffee</span></a><a href="../../lib/psd/nodes/layer.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">layer.coffee</span></a><a href="../../lib/psd/nodes/root.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">root.coffee</span></a><a href="../../lib/psd/nodes/search.coffee.html" class="source "><span class="base_path">lib / psd / nodes / </span><span class="file_name">search.coffee</span></a><a href="../../lib/psd/path_record.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">path_record.coffee</span></a><a href="../../lib/psd/resource.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource.coffee</span></a><a href="../../lib/psd/resource_section.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resource_section.coffee</span></a><a href="../../lib/psd/resources/layer_comps.coffee.html" class="source "><span class="base_path">lib / psd / resources / </span><span class="file_name">layer_comps.coffee</span></a><a href="../../lib/psd/resources.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">resources.coffee</span></a><a href="../../lib/psd/util.coffee.html" class="source "><span class="base_path">lib / psd / </span><span class="file_name">util.coffee</span></a><a href="../../lib/psd.coffee.html" class="source "><span class="base_path">lib / </span><span class="file_name">psd.coffee</span></a><a href="../../shims/init.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">init.coffee</span></a><a href="../../shims/png.coffee.html" class="source "><span class="base_path">shims / </span><span class="file_name">png.coffee</span></a></div></div></div><table cellpadding="0" cellspacing="0"><thead><tr><th class="docs"><h1>lazy_execute.coffee</h1><div class="filepath">lib/psd/</div></th><th class="code"></th></tr></thead><tbody><tr id="section-1"><td class="docs"><div class="pilwrap"><a href="#section-1" class="pilcrow">&#182;</a></div><p>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&#39;t
going to use every piece of data in the document. This means, when you do request
some data that&#39;s proxied through LazyExecute, we can parse it on the fly. This overhead
should be incredibly minimal.</p>
<p>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.</p>
<p>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.</p>
<h2 id="example">Example</h2>
<pre><code class="lang-coffeescript">obj = new SomeObject()
data = new LazyExecute(obj, file)
.now(&#39;skip&#39;)
.later(&#39;parse&#39;)
.ignore(&#39;foo&#39;, &#39;bar&#39;)
.get()
</code></pre>
</td><td class="code"><div class="highlight"><pre><span class="nv">module.exports = </span><span class="k">class</span> <span class="nx">LazyExecute</span>
<span class="nv">constructor: </span><span class="nf">(@obj, @file) -&gt;</span>
<span class="vi">@startPos = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">tell</span><span class="p">()</span>
<span class="vi">@loaded = </span><span class="kc">false</span>
<span class="vi">@loadMethod = </span><span class="kc">null</span>
<span class="vi">@loadArgs = </span><span class="p">[]</span>
<span class="vi">@passthru = </span><span class="p">[]</span>
<span class="vi">@passthru = </span><span class="p">[]</span></pre></div></td></tr><tr id="section-2"><td class="docs"><div class="pilwrap"><a href="#section-2" class="pilcrow">&#182;</a></div><p>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.</p>
<span class="nv">now: </span><span class="nf">(method, args...) -&gt;</span>
</td><td class="code"><div class="highlight"><pre> <span class="nv">now: </span><span class="nf">(method, args...) -&gt;</span>
<span class="nx">@obj</span><span class="p">[</span><span class="nx">method</span><span class="p">].</span><span class="nx">apply</span><span class="p">(</span><span class="nx">@obj</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span>
<span class="k">return</span> <span class="nx">@</span>
<span class="k">return</span> <span class="nx">@</span></pre></div></td></tr><tr id="section-3"><td class="docs"><div class="pilwrap"><a href="#section-3" class="pilcrow">&#182;</a></div><p>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.</p>
<span class="nv">later: </span><span class="nf">(method, args...) -&gt;</span>
</td><td class="code"><div class="highlight"><pre> <span class="nv">later: </span><span class="nf">(method, args...) -&gt;</span>
<span class="vi">@loadMethod = </span><span class="nx">method</span>
<span class="vi">@loadArgs = </span><span class="nx">args</span>
<span class="k">return</span> <span class="nx">@</span>
<span class="k">return</span> <span class="nx">@</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>Sometimes we don&#39;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.</p>
<p>The arguments are a list of method/property names we don&#39;t want to trigger on-demand parsing.</p>
<span class="nv">ignore: </span><span class="nf">(args...) -&gt;</span>
</td><td class="code"><div class="highlight"><pre> <span class="nv">ignore: </span><span class="nf">(args...) -&gt;</span>
<span class="nx">@passthru</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">args</span>
<span class="k">return</span> <span class="nx">@</span>
<span class="k">return</span> <span class="nx">@</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>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.</p>
<span class="nv">get: </span><span class="nf">-&gt;</span>
</td><td class="code"><div class="highlight"><pre> <span class="nv">get: </span><span class="nf">-&gt;</span>
<span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">@obj</span> <span class="k">then</span> <span class="nx">do</span> <span class="nf">(key, val) =&gt;</span>
<span class="k">return</span> <span class="k">if</span> <span class="nx">@</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span><span class="o">?</span>
<span class="nb">Object</span><span class="p">.</span><span class="nx">defineProperty</span> <span class="nx">@</span><span class="p">,</span> <span class="nx">key</span><span class="p">,</span>
......@@ -28,9 +58,17 @@
<span class="nx">@load</span><span class="p">()</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">@loaded</span> <span class="o">and</span> <span class="o">not</span> <span class="p">(</span><span class="nx">key</span> <span class="k">in</span> <span class="nx">@passthru</span><span class="p">)</span>
<span class="nx">@obj</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span>
<span class="nx">@</span>
<span class="nx">@</span></pre></div></td></tr><tr id="section-6"><td class="docs"><div class="pilwrap"><a href="#section-6" class="pilcrow">&#182;</a></div><p>If we are accessing a property for the first time, then this will call the load method, which
was defined during setup with <code>later()</code>. The steps this performs are:</p>
<ol>
<li>Records the current file position.</li>
<li>Jumps to the recorded start position for the proxied data.</li>
<li>Calls the load method, which was defined with <code>later()</code>.</li>
<li>Jumps back to the original file position.</li>
<li>Sets the <code>@loaded</code> flag to true so we know this object has been parsed.</li>
</ol>
<span class="nv">load: </span><span class="nf">-&gt;</span>
</td><td class="code"><div class="highlight"><pre> <span class="nv">load: </span><span class="nf">-&gt;</span>
<span class="nv">origPos = </span><span class="nx">@file</span><span class="p">.</span><span class="nx">tell</span><span class="p">()</span>
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="nx">@startPos</span>
......@@ -39,4 +77,4 @@
<span class="nx">@file</span><span class="p">.</span><span class="nx">seek</span> <span class="nx">origPos</span>
<span class="vi">@loaded = </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:58 GMT-0400 (EDT) </div></div></body></html>
\ No newline at end of file
......@@ -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