Commit c3e7db58 authored by Ryan LeFevre's avatar Ryan LeFevre

Remove RSVP dependency and add all sections

parent a3d17b37
This diff is collapsed.
fs = require 'fs'
RSVP = require 'rsvp'
File = require './psd/file.coffee'
Header = require './psd/header.coffee'
Resources = require './psd/resources.coffee'
LayerMask = require './psd/layer_mask.coffee'
Image = require './psd/image.coffee'
module.exports = class PSD
@fromFile: (file) -> new PSD fs.readFileSync(file)
......@@ -13,11 +15,27 @@ module.exports = class PSD
@header = null
parse: ->
new RSVP.Promise (resolve, reject) =>
return resolve(@) if @parsed
return if @parsed
@parseHeader().then (header) =>
@header = header
resolve(@)
@parseHeader()
@parseResources()
@parseLayerMask()
@parseImage()
parseHeader: -> new Header(@file).parse()
@parsed = true
parseHeader: ->
@header = new Header(@file)
@header.parse()
parseResources: ->
@resources = new Resources(@file)
@resources.parse()
parseLayerMask: ->
@layerMask = new LayerMask(@file, @header)
@layerMask.parse()
parseImage: ->
@image = new Image(@file, @header)
@image.parse()
\ No newline at end of file
RSVP = require ('rsvp')
module.exports = class Header
# All of the color modes are stored internally as a short from 0-15.
# This is a mapping of that value to a human-readable name.
MODES = [
'Bitmap'
'GrayScale'
'IndexedColor'
'RGBColor'
'CMYKColor'
'HSLColor'
'HSBColor'
'Multichannel'
'Duotone'
'LabColor'
'Gray16'
'RGB48'
'Lab48'
'CMYK64'
'DeepMultichannel'
'Duotone16'
]
constructor: (@file) ->
@sig = null
@version = null
......@@ -11,7 +30,6 @@ module.exports = class Header
@mode = null
parse: ->
new RSVP.Promise (resolve, reject) =>
@sig = @file.readString(4)
@version = @file.readUShort()
......@@ -26,4 +44,11 @@ module.exports = class Header
colorDataLen = @file.readUInt()
@file.seek colorDataLen, true
resolve(@)
\ No newline at end of file
modeName: -> MODES[@mode]
export: ->
data = {}
for key in ['sig', 'version', 'channels', 'rows', 'cols', 'depth', 'mode']
data[key] = @[key]
data
module.exports = class Image
constructor: (@file, @header) ->
parse: ->
\ No newline at end of file
Util = require('./util.coffee')
module.exports = class LayerMask
constructor: (@file, @header) ->
@layers = []
@mergedAlpha = false
@globalMask = null
parse: ->
maskSize = @file.readInt()
finish = maskSize + @file.tell()
@file.seek finish
return
return if maskSize <= 0
layerInfoSize = Util.pad2 @file.readInt()
if layerInfoSize > 0
layerCount = @file.readShort()
if layerCount < 0
layerCount = Math.abs layerCount
@mergedAlpha = true
module.exports = class Resources
constructor: (@file) ->
@resources = {}
@typeIndex = {}
@length = null
parse: ->
@length = @file.readInt()
@file.seek @length, true
\ No newline at end of file
module.exports = class Util
@pad2: (i) -> (i + 1) & ~0x01
@pad4: (i) -> ((i + 4) & ~0x03) - 1
......@@ -3,7 +3,6 @@
"version": "0.0.1",
"dependencies": {
"coffee-script": "~ 1.7.1",
"rsvp": "~ 3.0.6",
"jspack": "~ 0.0.3"
},
"devDependencies": {
......
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