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' fs = require 'fs'
RSVP = require 'rsvp'
File = require './psd/file.coffee' File = require './psd/file.coffee'
Header = require './psd/header.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 module.exports = class PSD
@fromFile: (file) -> new PSD fs.readFileSync(file) @fromFile: (file) -> new PSD fs.readFileSync(file)
...@@ -13,11 +15,27 @@ module.exports = class PSD ...@@ -13,11 +15,27 @@ module.exports = class PSD
@header = null @header = null
parse: -> parse: ->
new RSVP.Promise (resolve, reject) => return if @parsed
return resolve(@) if @parsed
@parseHeader()
@parseHeader().then (header) => @parseResources()
@header = header @parseLayerMask()
resolve(@) @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 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) -> constructor: (@file) ->
@sig = null @sig = null
@version = null @version = null
...@@ -11,19 +30,25 @@ module.exports = class Header ...@@ -11,19 +30,25 @@ module.exports = class Header
@mode = null @mode = null
parse: -> parse: ->
new RSVP.Promise (resolve, reject) => @sig = @file.readString(4)
@sig = @file.readString(4) @version = @file.readUShort()
@version = @file.readUShort()
@file.seek 6, true
@channels = @file.readUShort()
@rows = @file.readUInt()
@cols = @file.readUInt()
@depth = @file.readUShort()
@mode = @file.readUShort()
@file.seek 6, true colorDataLen = @file.readUInt()
@file.seek colorDataLen, true
@channels = @file.readUShort() modeName: -> MODES[@mode]
@rows = @file.readUInt()
@cols = @file.readUInt()
@depth = @file.readUShort()
@mode = @file.readUShort()
colorDataLen = @file.readUInt() export: ->
@file.seek colorDataLen, true data = {}
for key in ['sig', 'version', 'channels', 'rows', 'cols', 'depth', 'mode']
data[key] = @[key]
resolve(@) data
\ No newline at end of file
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 @@ ...@@ -3,7 +3,6 @@
"version": "0.0.1", "version": "0.0.1",
"dependencies": { "dependencies": {
"coffee-script": "~ 1.7.1", "coffee-script": "~ 1.7.1",
"rsvp": "~ 3.0.6",
"jspack": "~ 0.0.3" "jspack": "~ 0.0.3"
}, },
"devDependencies": { "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