Commit 8560364d authored by Ryan LeFevre's avatar Ryan LeFevre

Add legacy typetool

parent dcdec792
var util = require('util');
var PSD = require('../../');
var file = process.argv[2] || './examples/images/example.psd';
......@@ -5,4 +6,4 @@ var file = process.argv[2] || './examples/images/example.psd';
var psd = PSD.fromFile(file);
psd.parse();
console.log(psd.tree().export());
console.log(util.inspect(psd.tree().export(), {depth: null}));
......@@ -60,4 +60,4 @@ module.exports = class PSD extends Module
.ignore('width', 'height')
.get()
tree: -> new PSD.Node.Root(@)
\ No newline at end of file
tree: -> new PSD.Node.Root(@)
......@@ -6,11 +6,3 @@ module.exports =
g = Util.clamp (65535 - (m * (255 - k) + (k << 8))) >> 8, 0, 255
b = Util.clamp (65535 - (y * (255 - k) + (k << 8))) >> 8, 0, 255
[r, g, b]
# def cmyk_to_rgb(c, m, y, k)
# Hash[{
# r: (65535 - (c * (255 - k) + (k << 8))) >> 8,
# g: (65535 - (m * (255 - k) + (k << 8))) >> 8,
# b: (65535 - (y * (255 - k) + (k << 8))) >> 8
# }.map { |k, v| [k, Util.clamp(v, 0, 255)] }]
# end
{jspack} = require 'jspack'
iconv = require 'iconv-lite'
Color = require './color.coffee'
Util = require './util.coffee'
module.exports = class File
......@@ -46,3 +47,10 @@ module.exports = class File
readByte: -> @read(1)[0]
readBoolean: -> @readByte() isnt 0
# Reads a 32-bit color space value.
readSpaceColor: ->
colorSpace = @readShort()
colorComponent = (@readShort() >> 8) for i in [0...4]
colorSpace: colorSpace, components: colorComponent
......@@ -8,6 +8,7 @@ LAYER_INFO = {
gradientFill: require('../layer_info/gradient_fill.coffee')
layerId: require('../layer_info/layer_id.coffee')
layerNameSource: require('../layer_info/layer_name_source.coffee')
legacyTypetool: require('../layer_info/legacy_typetool.coffee')
locked: require('../layer_info/locked.coffee')
metadata: require('../layer_info/metadata.coffee')
name: require('../layer_info/unicode_name.coffee')
......
_ = require 'lodash'
TypeTool = require './typetool.coffee'
module.exports = class LegacyTypeTool extends TypeTool
@shouldParse: (key) -> key is 'tySh'
constructor: (layer, length) ->
super(layer, length)
@transform = {}
@faces = []
@styles = []
@lines = []
@type = 0
@scalingFactor = 0
@characterCount = 0
@horzPlace = 0
@vertPlace = 0
@selectStart = 0
@selectEnd = 0
@color = null
@antialias = null
parse: ->
@file.seek 2, true # Version
@parseTransformInfo()
# Font information
@file.seek 2, true
facesCount = @file.readShort()
for i in [0...facesCount]
@faces.push _({}).tap (face) =>
face.mark = @file.readShort()
face.fontType = @file.readInt()
face.fontName = @file.readString()
face.fontFamilyName = @file.readString()
face.fontStyleName = @file.readString()
face.script = @file.readShort()
face.numberAxesVector = @file.readInt()
face.vector = []
for j in [0...face.numberAxesVector]
face.vector.push @file.readInt()
stylesCount = @file.readShort()
for i in [0...stylesCount]
@styles.push _({}).tap (style) =>
style.mark = @file.readShort()
style.faceMark = @file.readShort()
style.size = @file.readInt()
style.tracking = @file.readInt()
style.kerning = @file.readInt()
style.leading = @file.readInt()
style.baseShift = @file.readInt()
style.autoKern = @file.readBoolean()
@file.seek 1, true
style.rotate = @file.readBoolean()
@type = @file.readShort()
@scalingFactor = @file.readInt()
@characterCount = @file.readInt()
@horzPlace = @file.readInt()
@vertPlace = @file.readInt()
@selectStart = @file.readInt()
@selectEnd = @file.readInt()
linesCount = @file.readShort()
for i in [0...linesCount]
@lines.push _({}).tap (line) ->
line.charCount = @file.readInt()
line.orientation = @file.readShort()
line.alignment = @file.readShort()
line.actualChar = @file.readShort()
line.style = @file.readShort()
@color = @file.readSpaceColor()
@antialias = @file.readBoolean()
LayerInfo = require '../layer_info.coffee'
# Not 100% sure what the purpose of this key is, but it seems to exist
# whenever the lsct key doesn't. Parsing this like a layer section
# divider seems to solve a lot of parsing issues with folders.
#
# See https://github.com/layervault/psd.rb/issues/38
module.exports = class NestedSectionDivider extends LayerInfo
@shouldParse: (key) -> key is 'lsdk'
......@@ -14,4 +19,4 @@ module.exports = class NestedSectionDivider extends LayerInfo
switch code
when 1, 2 then @isFolder = true
when 3 then @isHidden = true
\ No newline at end of file
when 3 then @isHidden = true
......@@ -27,8 +27,7 @@ module.exports = class TextElements extends LayerInfo
parse: ->
@version = @file.readShort()
for name, index in TRANSFORM_VALUE
@transform[name] = @file.readDouble()
@parseTransformInfo()
@textVersion = @file.readShort()
@descriptorVersion = @file.readInt()
......@@ -46,6 +45,10 @@ module.exports = class TextElements extends LayerInfo
for name, index in COORDS_VALUE
@coords[name] = @file.readDouble()
parseTransformInfo: ->
for name, index in TRANSFORM_VALUE
@transform[name] = @file.readDouble()
fonts: ->
return [] unless @engineData?
@engineData.ResourceDict.FontSet.map (f) -> f.Name
......
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