Fetching contributors…
Cannot retrieve contributors at this time
77 lines (68 sloc) 3.45 KB
LazyExecute = require '../'
Util = require '../'
# 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()
# ```
artboard: require('../layer_info/')
blendClippingElements: require('../layer_info/')
blendInteriorElements: require('../layer_info/')
fillOpacity: require('../layer_info/')
gradientFill: require('../layer_info/')
layerId: require('../layer_info/')
layerNameSource: require('../layer_info/')
legacyTypetool: require('../layer_info/')
locked: require('../layer_info/')
metadata: require('../layer_info/')
name: require('../layer_info/')
nestedSectionDivider: require('../layer_info/')
objectEffects: require('../layer_info/')
sectionDivider: require('../layer_info/')
solidColor: require('../layer_info/')
typeTool: require('../layer_info/')
vectorMask: require('../layer_info/')
vectorOrigination: require('../layer_info/')
vectorStroke: require('../layer_info/')
vectorStrokeContent: require('../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 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()
keyParseable = false
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)
# 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
# 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. length, true if not keyParseable