psd2html 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/psd2html +15 -6
- data/lib/psd2html.rb +7 -6
- data/lib/psd2html/convertor.rb +21 -7
- data/lib/psd2html/psconvertor/block.rb +3 -2
- data/lib/psd2html/psconvertor/img.rb +7 -4
- data/lib/psd2html/psconvertor/imgLink.rb +5 -5
- data/lib/psd2html/psconvertor/text.rb +2 -2
- data/lib/psd2html/version.rb +1 -1
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 507d8336a81cbfb89f58e6016204d914d944da50
|
4
|
+
data.tar.gz: 4ca147dff5d8e3dffc9819c066adcaf81e6fa270
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3114efbc5a00334a46b02f89f000b5f42ba0267a03b9107c7de7ab6236a11390d4f27b0520a780e3ea512435caf1c9b618a4c4f591504453cd2beeab54d73c68
|
7
|
+
data.tar.gz: 245e00d2128f24ad74035974bbb3ebaf994fcd96daae293d617e55c18cd9035a44e2a2473bde9d0848f0d1c4c5be34ee0550a927a3dc1ffda5fe4110e44c6890
|
data/bin/psd2html
CHANGED
@@ -1,12 +1,21 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
require_relative '../lib/psd2html.rb'
|
3
3
|
psdPath = ARGV[0]
|
4
4
|
dstHtmlPath = ARGV[1]
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
else
|
5
|
+
|
6
|
+
if psdPath && dstHtmlPath
|
7
|
+
psd = Psd2Html.new(psdPath,dstHtmlPath)
|
9
8
|
fh = File.new(dstHtmlPath, "w") #创建一个可写文件流
|
10
9
|
fh.puts psd.render()
|
11
10
|
fh.close
|
12
|
-
|
11
|
+
else
|
12
|
+
puts <<-EOF
|
13
|
+
Please provide psdpath and htmlpath
|
14
|
+
|
15
|
+
Usage:
|
16
|
+
psd2html psdpath htmlpath
|
17
|
+
EOF
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
data/lib/psd2html.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'psd'
|
2
|
-
require_relative '
|
2
|
+
require_relative './until.rb'
|
3
3
|
require_relative 'psd2html/convertor.rb'
|
4
4
|
Dir.glob( File.expand_path( "psd2html/psconvertor/*.rb", File.dirname(__FILE__) ) ) do |convertor|
|
5
5
|
require convertor
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
class Psd2Html
|
9
9
|
CONVERTING_MAP = {
|
10
10
|
"text" => ::Psd2html::PsConvertor::Text,
|
@@ -16,13 +16,14 @@ class Psd2Html
|
|
16
16
|
"img-bg" => ::Psd2html::PsConvertor::ImgBackground,
|
17
17
|
"root" => ::Psd2html::PsConvertor::Root
|
18
18
|
}
|
19
|
-
def initialize(psdPath)
|
19
|
+
def initialize(psdPath,dstHtmlPath)
|
20
|
+
@dstHtmlPath = dstHtmlPath
|
20
21
|
psd = PSD.new(psdPath)
|
21
22
|
psd.parse!
|
22
23
|
blockRoot = psd.tree
|
23
24
|
rootConvertor = get_convertor(blockRoot,1)
|
24
25
|
@treeRoot = format_tree(rootConvertor)
|
25
|
-
|
26
|
+
Until.log("start generate psd tree....")
|
26
27
|
end
|
27
28
|
|
28
29
|
def render_css
|
@@ -48,7 +49,7 @@ class Psd2Html
|
|
48
49
|
protected
|
49
50
|
def get_convertor(node,index)
|
50
51
|
|
51
|
-
return CONVERTING_MAP["root"].new(node,index) if node.root?
|
52
|
+
return CONVERTING_MAP["root"].new(node,index,@dstHtmlPath) if node.root?
|
52
53
|
|
53
54
|
return unless node.name.include?("|")
|
54
55
|
|
@@ -56,7 +57,7 @@ class Psd2Html
|
|
56
57
|
unless CONVERTING_MAP.include?(convertorName)
|
57
58
|
return
|
58
59
|
end
|
59
|
-
CONVERTING_MAP[convertorName].new(node,index)
|
60
|
+
CONVERTING_MAP[convertorName].new(node,index,@dstHtmlPath)
|
60
61
|
end
|
61
62
|
def format_tree(convertor)
|
62
63
|
if convertor.psNode.has_children?
|
data/lib/psd2html/convertor.rb
CHANGED
@@ -24,11 +24,12 @@ module Psd2html
|
|
24
24
|
"tag" => "div",
|
25
25
|
"content" => ""
|
26
26
|
}
|
27
|
-
def initialize(psNode,index)
|
27
|
+
def initialize(psNode,index,dstPath)
|
28
28
|
@psNode = psNode
|
29
29
|
@index = index
|
30
30
|
@parentConvertor = nil
|
31
31
|
@childrenConvertors = []
|
32
|
+
@dstPath = dstPath
|
32
33
|
end
|
33
34
|
def guid
|
34
35
|
className = @psNode.name.split("|")[-2]
|
@@ -40,6 +41,15 @@ module Psd2html
|
|
40
41
|
end
|
41
42
|
|
42
43
|
end
|
44
|
+
|
45
|
+
def curleft
|
46
|
+
wrapleft = @parentConvertor.psNode.respond_to?("left") ? parentConvertor.psNode.left : 0
|
47
|
+
"#{@psNode.left-wrapleft}px"
|
48
|
+
end
|
49
|
+
def curtop
|
50
|
+
wraptop = @parentConvertor.psNode.respond_to?("top") ? parentConvertor.psNode.top : 0
|
51
|
+
"#{@psNode.top-wraptop}px"
|
52
|
+
end
|
43
53
|
#需要被重写,用于生成css的对象hash
|
44
54
|
def css_skeleton
|
45
55
|
CSS_HASH_BASE
|
@@ -56,6 +66,7 @@ module Psd2html
|
|
56
66
|
end
|
57
67
|
#为了处理css的同名问题,需要使用一个hash来去重
|
58
68
|
def css_map
|
69
|
+
Until.log("start generate css of #{@psNode.name}...")
|
59
70
|
return unless css_skeleton
|
60
71
|
data = css_skeleton.clone
|
61
72
|
data["styles"] = hash_to_array(data["styles"])
|
@@ -66,7 +77,6 @@ module Psd2html
|
|
66
77
|
end
|
67
78
|
end
|
68
79
|
def render_css
|
69
|
-
Until.log("start generate css of #{@psNode.name}...")
|
70
80
|
css_map()
|
71
81
|
cssStr = ""
|
72
82
|
@@css_dictory.values.each do |cssData|
|
@@ -74,11 +84,10 @@ module Psd2html
|
|
74
84
|
end
|
75
85
|
@@css_dictory = {}
|
76
86
|
cssStr = sync_css(cssStr)
|
77
|
-
Until.log("done generate css of #{@psNode.name}...")
|
78
87
|
end
|
79
88
|
|
80
89
|
def render_html
|
81
|
-
Until.log("start generate html of #{
|
90
|
+
Until.log("start generate html of #{}...")
|
82
91
|
return "" unless html_skeleton
|
83
92
|
data = html_skeleton.clone
|
84
93
|
data["attributes"] = hash_to_array(data["attributes"])
|
@@ -89,7 +98,6 @@ module Psd2html
|
|
89
98
|
|
90
99
|
htmlStr = Mustache.render(get_html_tpl,data)
|
91
100
|
htmlStr = sync_html(htmlStr)
|
92
|
-
Until.log("done generate html of #{@psNode.name}...")
|
93
101
|
end
|
94
102
|
def sync_css(cssstr)
|
95
103
|
cssstr
|
@@ -108,10 +116,16 @@ module Psd2html
|
|
108
116
|
def css_hook(style)
|
109
117
|
hookHash = {
|
110
118
|
"pt" => "px",
|
111
|
-
"MicrosoftYaHei" => "microsoft yahei"
|
119
|
+
"MicrosoftYaHei" => "microsoft yahei",
|
120
|
+
"rgba\\((\\s*\\d+,\\s*\\d+,\\s*\\d+),\\s*\\d+\\)" => -> { '#' + $1.split(',').map { |v| v.to_i.to_s(16) }.join }
|
112
121
|
}
|
113
122
|
hookHash.each do |key,value|
|
114
|
-
|
123
|
+
if value.is_a?(Proc)
|
124
|
+
|
125
|
+
style = style.gsub(Regexp.new(key)) { value.call }
|
126
|
+
else
|
127
|
+
style = style.gsub(Regexp.new(key), value)
|
128
|
+
end
|
115
129
|
end
|
116
130
|
style
|
117
131
|
end
|
@@ -3,6 +3,7 @@ module Psd2html
|
|
3
3
|
class Block < ::Psd2html::Convertor
|
4
4
|
|
5
5
|
def css_skeleton
|
6
|
+
|
6
7
|
cssRenderData = {
|
7
8
|
"classname" => "block-#{guid}",
|
8
9
|
"styles" => {
|
@@ -10,8 +11,8 @@ module Psd2html
|
|
10
11
|
"display" => "inline-block",
|
11
12
|
"width" => "#{@psNode.width}px",
|
12
13
|
"height" => "#{@psNode.height}px",
|
13
|
-
"left" =>
|
14
|
-
"top" =>
|
14
|
+
"left" => curleft,
|
15
|
+
"top" => curtop,
|
15
16
|
"z-index" => "#{@psNode.depth}#{@parentConvertor.childrenConvertors.length - @index.to_i}"
|
16
17
|
}
|
17
18
|
}
|
@@ -7,10 +7,11 @@ module Psd2html
|
|
7
7
|
"styles" => {
|
8
8
|
"position" => "absolute",
|
9
9
|
"display" => "inline-block",
|
10
|
+
"border" => "none",
|
10
11
|
"width" => "#{@psNode.width}px",
|
11
12
|
"height" => "#{@psNode.height}px",
|
12
|
-
"left" =>
|
13
|
-
"top" =>
|
13
|
+
"left" => curleft,
|
14
|
+
"top" => curtop,
|
14
15
|
"z-index" => "#{@psNode.depth}#{@parentConvertor.childrenConvertors.length - @index.to_i}"
|
15
16
|
}
|
16
17
|
}
|
@@ -20,8 +21,10 @@ module Psd2html
|
|
20
21
|
"<{{tag}} {{#attributes}} {{key}}=\"{{value}}\" {{/attributes}} />"
|
21
22
|
end
|
22
23
|
def html_skeleton
|
23
|
-
|
24
|
-
|
24
|
+
|
25
|
+
|
26
|
+
imgUrl = "#{File.dirname(@dstPath)}/img-source-#{guid}-#{Time.now.to_i}.png"
|
27
|
+
@psNode.image.save_as_png(imgUrl)
|
25
28
|
htmlRenderData = {
|
26
29
|
"attributes" => {
|
27
30
|
"class" => "img-#{guid}",
|
@@ -12,22 +12,22 @@ module Psd2html
|
|
12
12
|
"display" => "inline-block",
|
13
13
|
"width" => "#{@psNode.width}px",
|
14
14
|
"height" => "#{@psNode.height}px",
|
15
|
-
"left" =>
|
16
|
-
"top" =>
|
15
|
+
"left" => curleft,
|
16
|
+
"top" => curtop,
|
17
17
|
"z-index" => "#{@psNode.depth}#{@parentConvertor.childrenConvertors.length - @index.to_i}"
|
18
18
|
}
|
19
19
|
}
|
20
20
|
cssRenderData = CSS_HASH_BASE.merge(cssRenderData)
|
21
21
|
end
|
22
22
|
def html_skeleton
|
23
|
-
imgUrl = "
|
24
|
-
|
23
|
+
imgUrl = "#{File.dirname(@dstPath)}/img-source-#{guid}-#{Time.now.to_i}.png"
|
24
|
+
@psNode.image.save_as_png(imgUrl)
|
25
25
|
htmlRenderData = {
|
26
26
|
"attributes" => {
|
27
27
|
"class" => "img-#{guid}",
|
28
28
|
"href" => "#"
|
29
29
|
},
|
30
|
-
"content" => "<img src=\"#{imgUrl}\" />",
|
30
|
+
"content" => "<img border=0 src=\"#{imgUrl}\" />",
|
31
31
|
"tag" => "a"
|
32
32
|
}
|
33
33
|
htmlRenderData = HTML_HASH_BASE.merge(htmlRenderData)
|
@@ -9,8 +9,8 @@ module Psd2html
|
|
9
9
|
"display" => "inline-block",
|
10
10
|
"width" => "#{@psNode.width+2}px",
|
11
11
|
"height" => "#{@psNode.height+2}px",
|
12
|
-
"left" =>
|
13
|
-
"top" =>
|
12
|
+
"left" => curleft,
|
13
|
+
"top" => curtop,
|
14
14
|
"z-index" => "#{@psNode.depth}#{@parentConvertor.childrenConvertors.length - @index.to_i}"
|
15
15
|
}
|
16
16
|
}
|
data/lib/psd2html/version.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: psd2html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cherishpeace
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mustache
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '0.9'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '0.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: psd
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,7 +91,7 @@ files:
|
|
91
91
|
- lib/psd2html/psconvertor/textLink.rb
|
92
92
|
- lib/psd2html/version.rb
|
93
93
|
- lib/until.rb
|
94
|
-
homepage:
|
94
|
+
homepage: https://github.com/cherishpeace/psd2html
|
95
95
|
licenses:
|
96
96
|
- MIT
|
97
97
|
metadata: {}
|