Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
psd-parse
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
劳工
psd-parse
Commits
30e0cbff
Commit
30e0cbff
authored
Sep 27, 2019
by
rockyl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
节点增加uuid字段
parent
4a712d00
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
115 additions
and
37 deletions
+115
-37
index.es.js
dist/index.es.js
+36
-10
index.es.js.map
dist/index.es.js.map
+1
-1
index.js
dist/index.js
+36
-10
index.js.map
dist/index.js.map
+1
-1
index.umd.js
dist/index.umd.js
+40
-14
index.umd.js.map
dist/index.umd.js.map
+1
-1
No files found.
dist/index.es.js
View file @
30e0cbff
...
...
@@ -3,6 +3,7 @@ import path from 'path';
import
fs
from
'fs-extra'
;
import
Color
from
'color'
;
import
generateUUID
from
'uuid/v4'
;
import
hash
from
'object-hash'
;
/**
* Created by rockyl on 2019-08-09.
...
...
@@ -228,18 +229,20 @@ async function execute$1(psdFile, options) {
let
viewRoot
=
{
name
:
path
.
basename
(
psdFile
,
'.psd'
),
type
:
'node'
,
uuid
:
generateUUID
(),
};
const
assets
=
[];
await
walkNode
(
tree
,
async
function
(
node
,
parent
)
{
const
{
x
,
y
,
width
,
height
,
alpha
,
visible
,
origin
:
{
layer
:
{
typeTool
,
solidColor
}}}
=
node
;
const
{
name
,
x
,
y
,
width
,
height
,
alpha
,
visible
,
origin
:
{
layer
:
{
typeTool
,
solidColor
}}}
=
node
;
let
properties
=
{
width
,
height
,
alpha
,
visible
,
};
let
viewNode
=
{
name
:
node
.
name
,
name
,
properties
,
uuid
:
generateUUID
(),
};
if
(
x
!==
0
)
{
properties
.
x
=
x
;
...
...
@@ -248,8 +251,8 @@ async function execute$1(psdFile, options) {
properties
.
y
=
y
;
}
if
(
typeTool
)
{
let
fontInfo
=
typeTool
();
if
(
typeTool
)
{
let
fontInfo
=
typeTool
();
const
fonts
=
fontInfo
.
fonts
();
const
styles
=
fontInfo
.
styles
();
const
{
RunLengthArray
}
=
fontInfo
.
engineData
.
EngineDict
.
StyleRun
;
...
...
@@ -259,16 +262,16 @@ async function execute$1(psdFile, options) {
fonts
,
styles
,
RunLengthArray
,
};
viewNode
.
type
=
'label'
;
}
else
if
(
solidColor
)
{
}
else
if
(
solidColor
)
{
const
{
r
,
g
,
b
}
=
solidColor
();
let
color
=
Color
({
r
,
g
,
b
});
viewNode
.
type
=
'rect'
;
properties
.
fillColor
=
'#'
+
color
.
rgbNumber
().
toString
(
16
);
}
else
{
if
(
node
.
hasOwnProperty
(
'children'
))
{
}
else
{
if
(
node
.
hasOwnProperty
(
'children'
))
{
viewNode
.
type
=
'node'
;
}
else
{
}
else
{
viewNode
.
type
=
'image'
;
const
uuid
=
generateUUID
();
...
...
@@ -278,12 +281,19 @@ async function execute$1(psdFile, options) {
const
imageFilePath
=
path
.
join
(
imagesPath
,
uuid
+
ext
);
await
fs
.
ensureDir
(
path
.
dirname
(
imageFilePath
));
await
node
.
origin
.
saveAsPng
(
imageFilePath
);
let
png
=
node
.
origin
.
toPng
();
let
buffer
=
await
savePng
(
png
,
imageFilePath
);
//await node.origin.saveAsPng(imageFilePath);
const
hashFileName
=
hash
(
buffer
);
const
hashFilePath
=
path
.
join
(
imagesPath
,
hashFileName
+
ext
);
await
fs
.
rename
(
imageFilePath
,
hashFilePath
);
assets
.
push
({
name
:
uuid
,
name
,
ext
,
uuid
,
hash
:
hashFileName
,
});
}
}
...
...
@@ -303,5 +313,21 @@ async function execute$1(psdFile, options) {
}
}
function
savePng
(
png
,
output
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
let
buffer
,
buffers
=
[];
png
.
pack
()
.
on
(
'error'
,
reject
)
.
on
(
'data'
,
(
data
)
=>
buffers
.
push
(
data
))
.
on
(
'end'
,
()
=>
{
buffer
=
Buffer
.
concat
(
buffers
);
})
.
pipe
(
fs
.
createWriteStream
(
output
))
.
on
(
'finish'
,
()
=>
{
resolve
(
buffer
);
});
});
}
export
{
getTree
,
execute
as
toEgret
,
execute$1
as
toZeroing
};
//# sourceMappingURL=index.es.js.map
dist/index.es.js.map
View file @
30e0cbff
{
"version"
:
3
,
"file"
:
"index.es.js"
,
"sources"
:
[
"../src/psd-tree.js"
,
"../src/utils.js"
,
"../src/egret.js"
,
"../src/zeroing.js"
],
"sourcesContent"
:
[
"/**
\n
* Created by rockyl on 2019-08-09.
\n
*/
\n\n
const PSD = require('psd');
\n\n
export async function getTree(psdFilePath) {\n
\t
const psd = await PSD.open(psdFilePath);
\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*
\n
* 导出exml
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import {walkNode, walkObject} from
\"
./utils
\"
;
\n
import xml from
\"
xml
\"
;
\n
import path from
\"
path
\"
;
\n
import fs from
\"
fs-extra
\"
;
\n\n
const elementTpls = {\n
\t
'e:Group': [],
\n\t
'e:Image': {_attr: {source: '
{
res}'}
}
,
\n\t
'e:Button': [
\n\t\t
{_attr: {label: '
{
1}',}
}
,
\n\t\t
{\n
\t\t\t
'e:skinName': [
\n\t\t\t\t
{\n
\t\t\t\t\t
'e:Skin': [
\n\t\t\t\t\t\t
{_attr: {states: 'up,down,disabled'}},
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Image': {_attr: {width: '100%', height: '100%', source: '
{
res}'}},\n\t\t\t\t\t\t
}
,
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Label': {_attr: {id: 'labelDisplay', horizontalCenter: '0', verticalCenter: '0'}},
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t
]
\n\t\t\t\t
}
\n\t\t\t
]
\n\t\t
}
\n\t
]
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const {skinFilePath, skinClassName, resPath, resGroupName} = options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
const exmlRoot = [
\n\t\t
{\n
\t\t\t
_attr: {\n
\t\t\t\t
class: skinClassName,
\n\t\t\t\t
width: tree.width,
\n\t\t\t\t
height: tree.height,
\n\t\t\t\t
'xmlns:e':
\"
http://ns.egret.com/eui
\"
,
\n\t\t\t\t
'xmlns:w':
\"
http://ns.egret.com/wing
\"
,
\n\t\t\t
},
\n\t\t
},
\n\t
];
\n\t
const exmlData = {\n
\t\t
'e:Skin': exmlRoot
\n\t
};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible} = node;
\n\t\t
let attributes = {width, height, alpha, visible};
\n\t\t
if (x !== 0) {\n
\t\t\t
attributes.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
attributes.y = y;
\n\t\t
}
\n\t\t
let element;
\n\t\t
let tagName;
\n\t\t
let imageResName;
\n\t\t
let params;
\n\n\t\t
let hasChild = node.hasOwnProperty('children');
\n\t\t
if (hasChild) {\n
\t\t\t
tagName = 'e:Group';
\n\t\t
} else {\n
\t\t\t
const nameParams = node.name.split('|');
\n\t\t\t
const nodeName = nameParams[0];
\n\n\t\t\t
attributes.name = nodeName;
\n\t\t\t
imageResName = resGroupName + '_' + nodeName;
\n\t\t\t
const imageFilePath = path.join(resPath, resGroupName + '_p', nodeName + '.png');
\n\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t
if (nameParams.length === 1) {\n
\t\t\t\t
tagName = 'e:Image';
\n\t\t\t
} else {\n
\t\t\t\t
params = nameParams[1].split(',');
\n\t\t\t\t
tagName = 'e:' + params[0];
\n\t\t\t
}
\n\n\t\t\t
//element[tagName] = {_attr: attributes};
\n\t\t
}
\n\n\t\t
let elementTpl = elementTpls[tagName];
\n\t\t
let elementContent;
\n\t\t
if (elementTpl) {\n
\t\t\t
elementContent = JSON.parse(JSON.stringify(elementTpl));
\n\t\t
} else {\n
\t\t\t
elementContent =
{
}\n\t\t
}
\n\t\t
element = {\n
\t\t\t
[tagName]: elementContent,
\n\t\t
};
\n\n\t\t
let attr;
\n\t\t
if (Array.isArray(elementContent)) {\n
\t\t\t
attr = elementContent.find(item => item._attr);
\n\t\t\t
if (!attr) {\n
\t\t\t\t
attr = {_attr:
{
}};\n\t\t\t\telementContent.unshift(attr);\n\t\t\t}\n\t\t
}
else {\n
\t\t\t
attr = elementContent;
\n\t\t
}
\n\n\t\t
Object.assign(attr._attr, attributes);
\n\n\t\t
if (imageResName) {\n
\t\t\t
await walkObject(element, function (key, value, obj) {\n
\t\t\t\t
if (value === '
{
res
}
') {\n
\t\t\t\t\t
obj[key] = imageResName;
\n\t\t\t\t
} else if (typeof value === 'string') {\n
\t\t\t\t\t
const result = value.match(/
{
(\\d+)
}
/g);
\n\t\t\t\t\t
if(result){\n
\t\t\t\t\t\t
for(let item of result){\n
\t\t\t\t\t\t\t
const pi = parseInt(item.match(/
{
(\\d+)
}
/)[1]);
\n\t\t\t\t\t\t\t
value = value.replace(item, params[pi])
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
obj[key] = value;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t
})
\n\t\t
}
\n\n\t\t
if (hasChild) {\n
\t\t\t
node.exmlNode = elementContent;
\n\t\t
}
\n\n\t\t
const exmlNode = parent.exmlNode || exmlRoot;
\n\t\t
exmlNode.push(element);
\n\t
});
\n\n\t
let exmlStr = xml(exmlData, {declaration: true, indent: true});
\n\t
await fs.ensureDir(path.dirname(skinFilePath));
\n\t
await fs.writeFile(skinFilePath, exmlStr);
\n\n
}"
,
"/**
\n
* Created by rockyl on 2019-09-26.
\n
*
\n
* 导出zeroing的视图
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import fs from
\"
fs-extra
\"
;
\n\n
export async function execute(psdFile, options) {\n
\t
const
{
\n\t\timagesPath,\n\t
}
= options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile, '.psd'),
\n\t\t
type: 'node',
\n\t
};
\n\n\t
const assets = [];
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible, origin: {layer: {typeTool, solidColor}}} = node;
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\t\t
let viewNode = {\n
\t\t\t
name: node.name,
\n\t\t\t
properties,
\n\t\t
};
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if(typeTool){\n
\t\t\t
let fontInfo= typeTool();
\n\t\t\t
const fonts = fontInfo.fonts();
\n\t\t\t
const styles = fontInfo.styles();
\n\t\t\t
const
{
RunLengthArray
}
= fontInfo.engineData.EngineDict.StyleRun;
\n\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
properties.textflow = {\n
\t\t\t\t
fonts, styles, RunLengthArray,
\n\t\t\t
};
\n\t\t\t
viewNode.type = 'label';
\n\t\t
}else if(solidColor){\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
viewNode.type = 'rect';
\n\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t
}else{\n
\t\t\t
if(node.hasOwnProperty('children')){\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
}else{\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
const uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
properties.source = 'asset|' + uuid;
\n\n\t\t\t\t
const imageFilePath = path.join(imagesPath, uuid + ext);
\n\t\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t\t
assets.push({\n
\t\t\t\t\t
name: uuid,
\n\t\t\t\t\t
ext,
\n\t\t\t\t\t
uuid,
\n\t\t\t\t
});
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
return {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
}
\n
}
\n
"
],
"names"
:
[
"execute"
],
"mappings"
:
"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"
}
\ No newline at end of file
{
"version"
:
3
,
"file"
:
"index.es.js"
,
"sources"
:
[
"../src/psd-tree.js"
,
"../src/utils.js"
,
"../src/egret.js"
,
"../src/zeroing.js"
],
"sourcesContent"
:
[
"/**
\n
* Created by rockyl on 2019-08-09.
\n
*/
\n\n
const PSD = require('psd');
\n\n
export async function getTree(psdFilePath) {\n
\t
const psd = await PSD.open(psdFilePath);
\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*
\n
* 导出exml
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import {walkNode, walkObject} from
\"
./utils
\"
;
\n
import xml from
\"
xml
\"
;
\n
import path from
\"
path
\"
;
\n
import fs from
\"
fs-extra
\"
;
\n\n
const elementTpls = {\n
\t
'e:Group': [],
\n\t
'e:Image': {_attr: {source: '
{
res}'}
}
,
\n\t
'e:Button': [
\n\t\t
{_attr: {label: '
{
1}',}
}
,
\n\t\t
{\n
\t\t\t
'e:skinName': [
\n\t\t\t\t
{\n
\t\t\t\t\t
'e:Skin': [
\n\t\t\t\t\t\t
{_attr: {states: 'up,down,disabled'}},
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Image': {_attr: {width: '100%', height: '100%', source: '
{
res}'}},\n\t\t\t\t\t\t
}
,
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Label': {_attr: {id: 'labelDisplay', horizontalCenter: '0', verticalCenter: '0'}},
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t
]
\n\t\t\t\t
}
\n\t\t\t
]
\n\t\t
}
\n\t
]
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const {skinFilePath, skinClassName, resPath, resGroupName} = options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
const exmlRoot = [
\n\t\t
{\n
\t\t\t
_attr: {\n
\t\t\t\t
class: skinClassName,
\n\t\t\t\t
width: tree.width,
\n\t\t\t\t
height: tree.height,
\n\t\t\t\t
'xmlns:e':
\"
http://ns.egret.com/eui
\"
,
\n\t\t\t\t
'xmlns:w':
\"
http://ns.egret.com/wing
\"
,
\n\t\t\t
},
\n\t\t
},
\n\t
];
\n\t
const exmlData = {\n
\t\t
'e:Skin': exmlRoot
\n\t
};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible} = node;
\n\t\t
let attributes = {width, height, alpha, visible};
\n\t\t
if (x !== 0) {\n
\t\t\t
attributes.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
attributes.y = y;
\n\t\t
}
\n\t\t
let element;
\n\t\t
let tagName;
\n\t\t
let imageResName;
\n\t\t
let params;
\n\n\t\t
let hasChild = node.hasOwnProperty('children');
\n\t\t
if (hasChild) {\n
\t\t\t
tagName = 'e:Group';
\n\t\t
} else {\n
\t\t\t
const nameParams = node.name.split('|');
\n\t\t\t
const nodeName = nameParams[0];
\n\n\t\t\t
attributes.name = nodeName;
\n\t\t\t
imageResName = resGroupName + '_' + nodeName;
\n\t\t\t
const imageFilePath = path.join(resPath, resGroupName + '_p', nodeName + '.png');
\n\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t
if (nameParams.length === 1) {\n
\t\t\t\t
tagName = 'e:Image';
\n\t\t\t
} else {\n
\t\t\t\t
params = nameParams[1].split(',');
\n\t\t\t\t
tagName = 'e:' + params[0];
\n\t\t\t
}
\n\n\t\t\t
//element[tagName] = {_attr: attributes};
\n\t\t
}
\n\n\t\t
let elementTpl = elementTpls[tagName];
\n\t\t
let elementContent;
\n\t\t
if (elementTpl) {\n
\t\t\t
elementContent = JSON.parse(JSON.stringify(elementTpl));
\n\t\t
} else {\n
\t\t\t
elementContent =
{
}\n\t\t
}
\n\t\t
element = {\n
\t\t\t
[tagName]: elementContent,
\n\t\t
};
\n\n\t\t
let attr;
\n\t\t
if (Array.isArray(elementContent)) {\n
\t\t\t
attr = elementContent.find(item => item._attr);
\n\t\t\t
if (!attr) {\n
\t\t\t\t
attr = {_attr:
{
}};\n\t\t\t\telementContent.unshift(attr);\n\t\t\t}\n\t\t
}
else {\n
\t\t\t
attr = elementContent;
\n\t\t
}
\n\n\t\t
Object.assign(attr._attr, attributes);
\n\n\t\t
if (imageResName) {\n
\t\t\t
await walkObject(element, function (key, value, obj) {\n
\t\t\t\t
if (value === '
{
res
}
') {\n
\t\t\t\t\t
obj[key] = imageResName;
\n\t\t\t\t
} else if (typeof value === 'string') {\n
\t\t\t\t\t
const result = value.match(/
{
(\\d+)
}
/g);
\n\t\t\t\t\t
if(result){\n
\t\t\t\t\t\t
for(let item of result){\n
\t\t\t\t\t\t\t
const pi = parseInt(item.match(/
{
(\\d+)
}
/)[1]);
\n\t\t\t\t\t\t\t
value = value.replace(item, params[pi])
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
obj[key] = value;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t
})
\n\t\t
}
\n\n\t\t
if (hasChild) {\n
\t\t\t
node.exmlNode = elementContent;
\n\t\t
}
\n\n\t\t
const exmlNode = parent.exmlNode || exmlRoot;
\n\t\t
exmlNode.push(element);
\n\t
});
\n\n\t
let exmlStr = xml(exmlData, {declaration: true, indent: true});
\n\t
await fs.ensureDir(path.dirname(skinFilePath));
\n\t
await fs.writeFile(skinFilePath, exmlStr);
\n\n
}"
,
"/**
\n
* Created by rockyl on 2019-09-26.
\n
*
\n
* 导出zeroing的视图
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import fs from
\"
fs-extra
\"
;
\n
import hash from 'object-hash';
\n\n
export async function execute(psdFile, options) {\n
\t
const
{
\n\t\timagesPath,\n\t
}
= options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {name, x, y, width, height, alpha, visible, origin: {layer: {typeTool, solidColor}}} = node;
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\t\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
const fonts = fontInfo.fonts();
\n\t\t\t
const styles = fontInfo.styles();
\n\t\t\t
const
{
RunLengthArray
}
= fontInfo.engineData.EngineDict.StyleRun;
\n\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
properties.textflow = {\n
\t\t\t\t
fonts, styles, RunLengthArray,
\n\t\t\t
};
\n\t\t\t
viewNode.type = 'label';
\n\t\t
} else if (solidColor) {\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
viewNode.type = 'rect';
\n\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t
} else {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
const uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
properties.source = 'asset|' + uuid;
\n\n\t\t\t\t
const imageFilePath = path.join(imagesPath, uuid + ext);
\n\t\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t\t
let png = node.origin.toPng();
\n\t\t\t\t
let buffer = await savePng(png, imageFilePath);
\n\t\t\t\t
//await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t\t
const hashFileName = hash(buffer);
\n\t\t\t\t
const hashFilePath = path.join(imagesPath, hashFileName + ext);
\n\t\t\t\t
await fs.rename(imageFilePath, hashFilePath);
\n\n\t\t\t\t
assets.push({\n
\t\t\t\t\t
name,
\n\t\t\t\t\t
ext,
\n\t\t\t\t\t
uuid,
\n\t\t\t\t\t
hash: hashFileName,
\n\t\t\t\t
});
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
return {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
}
\n
}
\n\n
function savePng(png, output) {\n
\t
return new Promise((resolve, reject) => {\n
\t\t
let buffer, buffers = [];
\n\t\t
png.pack()
\n\t\t\t
.on('error', reject)
\n\t\t\t
.on('data', (data) => buffers.push(data))
\n\t\t\t
.on('end', () => {\n
\t\t\t\t
buffer = Buffer.concat(buffers)
\n\t\t\t
})
\n\t\t\t
.pipe(fs.createWriteStream(output))
\n\t\t\t
.on('finish', () =>
{
\n\t\t\t\tresolve(buffer);\n\t\t\t});\n\t});\n}\n"],"names":["execute"],"mappings":"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"
}
\ No newline at end of file
dist/index.js
View file @
30e0cbff
...
...
@@ -9,6 +9,7 @@ var path = _interopDefault(require('path'));
var
fs
=
_interopDefault
(
require
(
'fs-extra'
));
var
Color
=
_interopDefault
(
require
(
'color'
));
var
generateUUID
=
_interopDefault
(
require
(
'uuid/v4'
));
var
hash
=
_interopDefault
(
require
(
'object-hash'
));
/**
* Created by rockyl on 2019-08-09.
...
...
@@ -234,18 +235,20 @@ async function execute$1(psdFile, options) {
let
viewRoot
=
{
name
:
path
.
basename
(
psdFile
,
'.psd'
),
type
:
'node'
,
uuid
:
generateUUID
(),
};
const
assets
=
[];
await
walkNode
(
tree
,
async
function
(
node
,
parent
)
{
const
{
x
,
y
,
width
,
height
,
alpha
,
visible
,
origin
:
{
layer
:
{
typeTool
,
solidColor
}}}
=
node
;
const
{
name
,
x
,
y
,
width
,
height
,
alpha
,
visible
,
origin
:
{
layer
:
{
typeTool
,
solidColor
}}}
=
node
;
let
properties
=
{
width
,
height
,
alpha
,
visible
,
};
let
viewNode
=
{
name
:
node
.
name
,
name
,
properties
,
uuid
:
generateUUID
(),
};
if
(
x
!==
0
)
{
properties
.
x
=
x
;
...
...
@@ -254,8 +257,8 @@ async function execute$1(psdFile, options) {
properties
.
y
=
y
;
}
if
(
typeTool
)
{
let
fontInfo
=
typeTool
();
if
(
typeTool
)
{
let
fontInfo
=
typeTool
();
const
fonts
=
fontInfo
.
fonts
();
const
styles
=
fontInfo
.
styles
();
const
{
RunLengthArray
}
=
fontInfo
.
engineData
.
EngineDict
.
StyleRun
;
...
...
@@ -265,16 +268,16 @@ async function execute$1(psdFile, options) {
fonts
,
styles
,
RunLengthArray
,
};
viewNode
.
type
=
'label'
;
}
else
if
(
solidColor
)
{
}
else
if
(
solidColor
)
{
const
{
r
,
g
,
b
}
=
solidColor
();
let
color
=
Color
({
r
,
g
,
b
});
viewNode
.
type
=
'rect'
;
properties
.
fillColor
=
'#'
+
color
.
rgbNumber
().
toString
(
16
);
}
else
{
if
(
node
.
hasOwnProperty
(
'children'
))
{
}
else
{
if
(
node
.
hasOwnProperty
(
'children'
))
{
viewNode
.
type
=
'node'
;
}
else
{
}
else
{
viewNode
.
type
=
'image'
;
const
uuid
=
generateUUID
();
...
...
@@ -284,12 +287,19 @@ async function execute$1(psdFile, options) {
const
imageFilePath
=
path
.
join
(
imagesPath
,
uuid
+
ext
);
await
fs
.
ensureDir
(
path
.
dirname
(
imageFilePath
));
await
node
.
origin
.
saveAsPng
(
imageFilePath
);
let
png
=
node
.
origin
.
toPng
();
let
buffer
=
await
savePng
(
png
,
imageFilePath
);
//await node.origin.saveAsPng(imageFilePath);
const
hashFileName
=
hash
(
buffer
);
const
hashFilePath
=
path
.
join
(
imagesPath
,
hashFileName
+
ext
);
await
fs
.
rename
(
imageFilePath
,
hashFilePath
);
assets
.
push
({
name
:
uuid
,
name
,
ext
,
uuid
,
hash
:
hashFileName
,
});
}
}
...
...
@@ -309,6 +319,22 @@ async function execute$1(psdFile, options) {
}
}
function
savePng
(
png
,
output
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
let
buffer
,
buffers
=
[];
png
.
pack
()
.
on
(
'error'
,
reject
)
.
on
(
'data'
,
(
data
)
=>
buffers
.
push
(
data
))
.
on
(
'end'
,
()
=>
{
buffer
=
Buffer
.
concat
(
buffers
);
})
.
pipe
(
fs
.
createWriteStream
(
output
))
.
on
(
'finish'
,
()
=>
{
resolve
(
buffer
);
});
});
}
exports
.
getTree
=
getTree
;
exports
.
toEgret
=
execute
;
exports
.
toZeroing
=
execute$1
;
...
...
dist/index.js.map
View file @
30e0cbff
{
"version"
:
3
,
"file"
:
"index.js"
,
"sources"
:
[
"../src/psd-tree.js"
,
"../src/utils.js"
,
"../src/egret.js"
,
"../src/zeroing.js"
],
"sourcesContent"
:
[
"/**
\n
* Created by rockyl on 2019-08-09.
\n
*/
\n\n
const PSD = require('psd');
\n\n
export async function getTree(psdFilePath) {\n
\t
const psd = await PSD.open(psdFilePath);
\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*
\n
* 导出exml
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import {walkNode, walkObject} from
\"
./utils
\"
;
\n
import xml from
\"
xml
\"
;
\n
import path from
\"
path
\"
;
\n
import fs from
\"
fs-extra
\"
;
\n\n
const elementTpls = {\n
\t
'e:Group': [],
\n\t
'e:Image': {_attr: {source: '
{
res}'}
}
,
\n\t
'e:Button': [
\n\t\t
{_attr: {label: '
{
1}',}
}
,
\n\t\t
{\n
\t\t\t
'e:skinName': [
\n\t\t\t\t
{\n
\t\t\t\t\t
'e:Skin': [
\n\t\t\t\t\t\t
{_attr: {states: 'up,down,disabled'}},
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Image': {_attr: {width: '100%', height: '100%', source: '
{
res}'}},\n\t\t\t\t\t\t
}
,
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Label': {_attr: {id: 'labelDisplay', horizontalCenter: '0', verticalCenter: '0'}},
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t
]
\n\t\t\t\t
}
\n\t\t\t
]
\n\t\t
}
\n\t
]
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const {skinFilePath, skinClassName, resPath, resGroupName} = options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
const exmlRoot = [
\n\t\t
{\n
\t\t\t
_attr: {\n
\t\t\t\t
class: skinClassName,
\n\t\t\t\t
width: tree.width,
\n\t\t\t\t
height: tree.height,
\n\t\t\t\t
'xmlns:e':
\"
http://ns.egret.com/eui
\"
,
\n\t\t\t\t
'xmlns:w':
\"
http://ns.egret.com/wing
\"
,
\n\t\t\t
},
\n\t\t
},
\n\t
];
\n\t
const exmlData = {\n
\t\t
'e:Skin': exmlRoot
\n\t
};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible} = node;
\n\t\t
let attributes = {width, height, alpha, visible};
\n\t\t
if (x !== 0) {\n
\t\t\t
attributes.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
attributes.y = y;
\n\t\t
}
\n\t\t
let element;
\n\t\t
let tagName;
\n\t\t
let imageResName;
\n\t\t
let params;
\n\n\t\t
let hasChild = node.hasOwnProperty('children');
\n\t\t
if (hasChild) {\n
\t\t\t
tagName = 'e:Group';
\n\t\t
} else {\n
\t\t\t
const nameParams = node.name.split('|');
\n\t\t\t
const nodeName = nameParams[0];
\n\n\t\t\t
attributes.name = nodeName;
\n\t\t\t
imageResName = resGroupName + '_' + nodeName;
\n\t\t\t
const imageFilePath = path.join(resPath, resGroupName + '_p', nodeName + '.png');
\n\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t
if (nameParams.length === 1) {\n
\t\t\t\t
tagName = 'e:Image';
\n\t\t\t
} else {\n
\t\t\t\t
params = nameParams[1].split(',');
\n\t\t\t\t
tagName = 'e:' + params[0];
\n\t\t\t
}
\n\n\t\t\t
//element[tagName] = {_attr: attributes};
\n\t\t
}
\n\n\t\t
let elementTpl = elementTpls[tagName];
\n\t\t
let elementContent;
\n\t\t
if (elementTpl) {\n
\t\t\t
elementContent = JSON.parse(JSON.stringify(elementTpl));
\n\t\t
} else {\n
\t\t\t
elementContent =
{
}\n\t\t
}
\n\t\t
element = {\n
\t\t\t
[tagName]: elementContent,
\n\t\t
};
\n\n\t\t
let attr;
\n\t\t
if (Array.isArray(elementContent)) {\n
\t\t\t
attr = elementContent.find(item => item._attr);
\n\t\t\t
if (!attr) {\n
\t\t\t\t
attr = {_attr:
{
}};\n\t\t\t\telementContent.unshift(attr);\n\t\t\t}\n\t\t
}
else {\n
\t\t\t
attr = elementContent;
\n\t\t
}
\n\n\t\t
Object.assign(attr._attr, attributes);
\n\n\t\t
if (imageResName) {\n
\t\t\t
await walkObject(element, function (key, value, obj) {\n
\t\t\t\t
if (value === '
{
res
}
') {\n
\t\t\t\t\t
obj[key] = imageResName;
\n\t\t\t\t
} else if (typeof value === 'string') {\n
\t\t\t\t\t
const result = value.match(/
{
(\\d+)
}
/g);
\n\t\t\t\t\t
if(result){\n
\t\t\t\t\t\t
for(let item of result){\n
\t\t\t\t\t\t\t
const pi = parseInt(item.match(/
{
(\\d+)
}
/)[1]);
\n\t\t\t\t\t\t\t
value = value.replace(item, params[pi])
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
obj[key] = value;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t
})
\n\t\t
}
\n\n\t\t
if (hasChild) {\n
\t\t\t
node.exmlNode = elementContent;
\n\t\t
}
\n\n\t\t
const exmlNode = parent.exmlNode || exmlRoot;
\n\t\t
exmlNode.push(element);
\n\t
});
\n\n\t
let exmlStr = xml(exmlData, {declaration: true, indent: true});
\n\t
await fs.ensureDir(path.dirname(skinFilePath));
\n\t
await fs.writeFile(skinFilePath, exmlStr);
\n\n
}"
,
"/**
\n
* Created by rockyl on 2019-09-26.
\n
*
\n
* 导出zeroing的视图
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import fs from
\"
fs-extra
\"
;
\n\n
export async function execute(psdFile, options) {\n
\t
const
{
\n\t\timagesPath,\n\t
}
= options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile, '.psd'),
\n\t\t
type: 'node',
\n\t
};
\n\n\t
const assets = [];
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible, origin: {layer: {typeTool, solidColor}}} = node;
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\t\t
let viewNode = {\n
\t\t\t
name: node.name,
\n\t\t\t
properties,
\n\t\t
};
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if(typeTool){\n
\t\t\t
let fontInfo= typeTool();
\n\t\t\t
const fonts = fontInfo.fonts();
\n\t\t\t
const styles = fontInfo.styles();
\n\t\t\t
const
{
RunLengthArray
}
= fontInfo.engineData.EngineDict.StyleRun;
\n\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
properties.textflow = {\n
\t\t\t\t
fonts, styles, RunLengthArray,
\n\t\t\t
};
\n\t\t\t
viewNode.type = 'label';
\n\t\t
}else if(solidColor){\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
viewNode.type = 'rect';
\n\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t
}else{\n
\t\t\t
if(node.hasOwnProperty('children')){\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
}else{\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
const uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
properties.source = 'asset|' + uuid;
\n\n\t\t\t\t
const imageFilePath = path.join(imagesPath, uuid + ext);
\n\t\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t\t
assets.push({\n
\t\t\t\t\t
name: uuid,
\n\t\t\t\t\t
ext,
\n\t\t\t\t\t
uuid,
\n\t\t\t\t
});
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
return {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
}
\n
}
\n
"
],
"names"
:
[
"execute"
],
"mappings"
:
"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"
}
\ No newline at end of file
{
"version"
:
3
,
"file"
:
"index.js"
,
"sources"
:
[
"../src/psd-tree.js"
,
"../src/utils.js"
,
"../src/egret.js"
,
"../src/zeroing.js"
],
"sourcesContent"
:
[
"/**
\n
* Created by rockyl on 2019-08-09.
\n
*/
\n\n
const PSD = require('psd');
\n\n
export async function getTree(psdFilePath) {\n
\t
const psd = await PSD.open(psdFilePath);
\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*
\n
* 导出exml
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import {walkNode, walkObject} from
\"
./utils
\"
;
\n
import xml from
\"
xml
\"
;
\n
import path from
\"
path
\"
;
\n
import fs from
\"
fs-extra
\"
;
\n\n
const elementTpls = {\n
\t
'e:Group': [],
\n\t
'e:Image': {_attr: {source: '
{
res}'}
}
,
\n\t
'e:Button': [
\n\t\t
{_attr: {label: '
{
1}',}
}
,
\n\t\t
{\n
\t\t\t
'e:skinName': [
\n\t\t\t\t
{\n
\t\t\t\t\t
'e:Skin': [
\n\t\t\t\t\t\t
{_attr: {states: 'up,down,disabled'}},
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Image': {_attr: {width: '100%', height: '100%', source: '
{
res}'}},\n\t\t\t\t\t\t
}
,
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Label': {_attr: {id: 'labelDisplay', horizontalCenter: '0', verticalCenter: '0'}},
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t
]
\n\t\t\t\t
}
\n\t\t\t
]
\n\t\t
}
\n\t
]
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const {skinFilePath, skinClassName, resPath, resGroupName} = options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
const exmlRoot = [
\n\t\t
{\n
\t\t\t
_attr: {\n
\t\t\t\t
class: skinClassName,
\n\t\t\t\t
width: tree.width,
\n\t\t\t\t
height: tree.height,
\n\t\t\t\t
'xmlns:e':
\"
http://ns.egret.com/eui
\"
,
\n\t\t\t\t
'xmlns:w':
\"
http://ns.egret.com/wing
\"
,
\n\t\t\t
},
\n\t\t
},
\n\t
];
\n\t
const exmlData = {\n
\t\t
'e:Skin': exmlRoot
\n\t
};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible} = node;
\n\t\t
let attributes = {width, height, alpha, visible};
\n\t\t
if (x !== 0) {\n
\t\t\t
attributes.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
attributes.y = y;
\n\t\t
}
\n\t\t
let element;
\n\t\t
let tagName;
\n\t\t
let imageResName;
\n\t\t
let params;
\n\n\t\t
let hasChild = node.hasOwnProperty('children');
\n\t\t
if (hasChild) {\n
\t\t\t
tagName = 'e:Group';
\n\t\t
} else {\n
\t\t\t
const nameParams = node.name.split('|');
\n\t\t\t
const nodeName = nameParams[0];
\n\n\t\t\t
attributes.name = nodeName;
\n\t\t\t
imageResName = resGroupName + '_' + nodeName;
\n\t\t\t
const imageFilePath = path.join(resPath, resGroupName + '_p', nodeName + '.png');
\n\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t
if (nameParams.length === 1) {\n
\t\t\t\t
tagName = 'e:Image';
\n\t\t\t
} else {\n
\t\t\t\t
params = nameParams[1].split(',');
\n\t\t\t\t
tagName = 'e:' + params[0];
\n\t\t\t
}
\n\n\t\t\t
//element[tagName] = {_attr: attributes};
\n\t\t
}
\n\n\t\t
let elementTpl = elementTpls[tagName];
\n\t\t
let elementContent;
\n\t\t
if (elementTpl) {\n
\t\t\t
elementContent = JSON.parse(JSON.stringify(elementTpl));
\n\t\t
} else {\n
\t\t\t
elementContent =
{
}\n\t\t
}
\n\t\t
element = {\n
\t\t\t
[tagName]: elementContent,
\n\t\t
};
\n\n\t\t
let attr;
\n\t\t
if (Array.isArray(elementContent)) {\n
\t\t\t
attr = elementContent.find(item => item._attr);
\n\t\t\t
if (!attr) {\n
\t\t\t\t
attr = {_attr:
{
}};\n\t\t\t\telementContent.unshift(attr);\n\t\t\t}\n\t\t
}
else {\n
\t\t\t
attr = elementContent;
\n\t\t
}
\n\n\t\t
Object.assign(attr._attr, attributes);
\n\n\t\t
if (imageResName) {\n
\t\t\t
await walkObject(element, function (key, value, obj) {\n
\t\t\t\t
if (value === '
{
res
}
') {\n
\t\t\t\t\t
obj[key] = imageResName;
\n\t\t\t\t
} else if (typeof value === 'string') {\n
\t\t\t\t\t
const result = value.match(/
{
(\\d+)
}
/g);
\n\t\t\t\t\t
if(result){\n
\t\t\t\t\t\t
for(let item of result){\n
\t\t\t\t\t\t\t
const pi = parseInt(item.match(/
{
(\\d+)
}
/)[1]);
\n\t\t\t\t\t\t\t
value = value.replace(item, params[pi])
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
obj[key] = value;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t
})
\n\t\t
}
\n\n\t\t
if (hasChild) {\n
\t\t\t
node.exmlNode = elementContent;
\n\t\t
}
\n\n\t\t
const exmlNode = parent.exmlNode || exmlRoot;
\n\t\t
exmlNode.push(element);
\n\t
});
\n\n\t
let exmlStr = xml(exmlData, {declaration: true, indent: true});
\n\t
await fs.ensureDir(path.dirname(skinFilePath));
\n\t
await fs.writeFile(skinFilePath, exmlStr);
\n\n
}"
,
"/**
\n
* Created by rockyl on 2019-09-26.
\n
*
\n
* 导出zeroing的视图
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import fs from
\"
fs-extra
\"
;
\n
import hash from 'object-hash';
\n\n
export async function execute(psdFile, options) {\n
\t
const
{
\n\t\timagesPath,\n\t
}
= options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {name, x, y, width, height, alpha, visible, origin: {layer: {typeTool, solidColor}}} = node;
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\t\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
const fonts = fontInfo.fonts();
\n\t\t\t
const styles = fontInfo.styles();
\n\t\t\t
const
{
RunLengthArray
}
= fontInfo.engineData.EngineDict.StyleRun;
\n\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
properties.textflow = {\n
\t\t\t\t
fonts, styles, RunLengthArray,
\n\t\t\t
};
\n\t\t\t
viewNode.type = 'label';
\n\t\t
} else if (solidColor) {\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
viewNode.type = 'rect';
\n\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t
} else {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
const uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
properties.source = 'asset|' + uuid;
\n\n\t\t\t\t
const imageFilePath = path.join(imagesPath, uuid + ext);
\n\t\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t\t
let png = node.origin.toPng();
\n\t\t\t\t
let buffer = await savePng(png, imageFilePath);
\n\t\t\t\t
//await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t\t
const hashFileName = hash(buffer);
\n\t\t\t\t
const hashFilePath = path.join(imagesPath, hashFileName + ext);
\n\t\t\t\t
await fs.rename(imageFilePath, hashFilePath);
\n\n\t\t\t\t
assets.push({\n
\t\t\t\t\t
name,
\n\t\t\t\t\t
ext,
\n\t\t\t\t\t
uuid,
\n\t\t\t\t\t
hash: hashFileName,
\n\t\t\t\t
});
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
return {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
}
\n
}
\n\n
function savePng(png, output) {\n
\t
return new Promise((resolve, reject) => {\n
\t\t
let buffer, buffers = [];
\n\t\t
png.pack()
\n\t\t\t
.on('error', reject)
\n\t\t\t
.on('data', (data) => buffers.push(data))
\n\t\t\t
.on('end', () => {\n
\t\t\t\t
buffer = Buffer.concat(buffers)
\n\t\t\t
})
\n\t\t\t
.pipe(fs.createWriteStream(output))
\n\t\t\t
.on('finish', () =>
{
\n\t\t\t\tresolve(buffer);\n\t\t\t});\n\t});\n}\n"],"names":["execute"],"mappings":"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"
}
\ No newline at end of file
dist/index.umd.js
View file @
30e0cbff
(
function
(
global
,
factory
)
{
typeof
exports
===
'object'
&&
typeof
module
!==
'undefined'
?
factory
(
exports
,
require
(
'xml'
),
require
(
'path'
),
require
(
'fs-extra'
),
require
(
'color'
),
require
(
'uuid/v4'
))
:
typeof
define
===
'function'
&&
define
.
amd
?
define
([
'exports'
,
'xml'
,
'path'
,
'fs-extra'
,
'color'
,
'uuid/v4'
],
factory
)
:
(
global
=
global
||
self
,
factory
(
global
[
'psd-parse'
]
=
{},
global
.
xml
,
global
.
path
,
global
.
fs
,
global
.
Color
,
global
.
generateUUID
));
}(
this
,
function
(
exports
,
xml
,
path
,
fs
,
Color
,
generateUUID
)
{
'use strict'
;
typeof
exports
===
'object'
&&
typeof
module
!==
'undefined'
?
factory
(
exports
,
require
(
'xml'
),
require
(
'path'
),
require
(
'fs-extra'
),
require
(
'color'
),
require
(
'uuid/v4'
)
,
require
(
'object-hash'
)
)
:
typeof
define
===
'function'
&&
define
.
amd
?
define
([
'exports'
,
'xml'
,
'path'
,
'fs-extra'
,
'color'
,
'uuid/v4'
,
'object-hash'
],
factory
)
:
(
global
=
global
||
self
,
factory
(
global
[
'psd-parse'
]
=
{},
global
.
xml
,
global
.
path
,
global
.
fs
,
global
.
Color
,
global
.
generateUUID
,
global
.
hash
));
}(
this
,
function
(
exports
,
xml
,
path
,
fs
,
Color
,
generateUUID
,
hash
)
{
'use strict'
;
xml
=
xml
&&
xml
.
hasOwnProperty
(
'default'
)
?
xml
[
'default'
]
:
xml
;
path
=
path
&&
path
.
hasOwnProperty
(
'default'
)
?
path
[
'default'
]
:
path
;
fs
=
fs
&&
fs
.
hasOwnProperty
(
'default'
)
?
fs
[
'default'
]
:
fs
;
Color
=
Color
&&
Color
.
hasOwnProperty
(
'default'
)
?
Color
[
'default'
]
:
Color
;
generateUUID
=
generateUUID
&&
generateUUID
.
hasOwnProperty
(
'default'
)
?
generateUUID
[
'default'
]
:
generateUUID
;
hash
=
hash
&&
hash
.
hasOwnProperty
(
'default'
)
?
hash
[
'default'
]
:
hash
;
/**
* Created by rockyl on 2019-08-09.
...
...
@@ -234,18 +235,20 @@
let
viewRoot
=
{
name
:
path
.
basename
(
psdFile
,
'.psd'
),
type
:
'node'
,
uuid
:
generateUUID
(),
};
const
assets
=
[];
await
walkNode
(
tree
,
async
function
(
node
,
parent
)
{
const
{
x
,
y
,
width
,
height
,
alpha
,
visible
,
origin
:
{
layer
:
{
typeTool
,
solidColor
}}}
=
node
;
const
{
name
,
x
,
y
,
width
,
height
,
alpha
,
visible
,
origin
:
{
layer
:
{
typeTool
,
solidColor
}}}
=
node
;
let
properties
=
{
width
,
height
,
alpha
,
visible
,
};
let
viewNode
=
{
name
:
node
.
name
,
name
,
properties
,
uuid
:
generateUUID
(),
};
if
(
x
!==
0
)
{
properties
.
x
=
x
;
...
...
@@ -254,8 +257,8 @@
properties
.
y
=
y
;
}
if
(
typeTool
)
{
let
fontInfo
=
typeTool
();
if
(
typeTool
)
{
let
fontInfo
=
typeTool
();
const
fonts
=
fontInfo
.
fonts
();
const
styles
=
fontInfo
.
styles
();
const
{
RunLengthArray
}
=
fontInfo
.
engineData
.
EngineDict
.
StyleRun
;
...
...
@@ -265,16 +268,16 @@
fonts
,
styles
,
RunLengthArray
,
};
viewNode
.
type
=
'label'
;
}
else
if
(
solidColor
)
{
}
else
if
(
solidColor
)
{
const
{
r
,
g
,
b
}
=
solidColor
();
let
color
=
Color
({
r
,
g
,
b
});
viewNode
.
type
=
'rect'
;
properties
.
fillColor
=
'#'
+
color
.
rgbNumber
().
toString
(
16
);
}
else
{
if
(
node
.
hasOwnProperty
(
'children'
))
{
}
else
{
if
(
node
.
hasOwnProperty
(
'children'
))
{
viewNode
.
type
=
'node'
;
}
else
{
}
else
{
viewNode
.
type
=
'image'
;
const
uuid
=
generateUUID
();
...
...
@@ -284,12 +287,19 @@
const
imageFilePath
=
path
.
join
(
imagesPath
,
uuid
+
ext
);
await
fs
.
ensureDir
(
path
.
dirname
(
imageFilePath
));
await
node
.
origin
.
saveAsPng
(
imageFilePath
);
let
png
=
node
.
origin
.
toPng
();
let
buffer
=
await
savePng
(
png
,
imageFilePath
);
//await node.origin.saveAsPng(imageFilePath);
const
hashFileName
=
hash
(
buffer
);
const
hashFilePath
=
path
.
join
(
imagesPath
,
hashFileName
+
ext
);
await
fs
.
rename
(
imageFilePath
,
hashFilePath
);
assets
.
push
({
name
:
uuid
,
name
,
ext
,
uuid
,
hash
:
hashFileName
,
});
}
}
...
...
@@ -309,6 +319,22 @@
}
}
function
savePng
(
png
,
output
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
let
buffer
,
buffers
=
[];
png
.
pack
()
.
on
(
'error'
,
reject
)
.
on
(
'data'
,
(
data
)
=>
buffers
.
push
(
data
))
.
on
(
'end'
,
()
=>
{
buffer
=
Buffer
.
concat
(
buffers
);
})
.
pipe
(
fs
.
createWriteStream
(
output
))
.
on
(
'finish'
,
()
=>
{
resolve
(
buffer
);
});
});
}
exports
.
getTree
=
getTree
;
exports
.
toEgret
=
execute
;
exports
.
toZeroing
=
execute$1
;
...
...
dist/index.umd.js.map
View file @
30e0cbff
{
"version"
:
3
,
"file"
:
"index.umd.js"
,
"sources"
:
[
"../src/psd-tree.js"
,
"../src/utils.js"
,
"../src/egret.js"
,
"../src/zeroing.js"
],
"sourcesContent"
:
[
"/**
\n
* Created by rockyl on 2019-08-09.
\n
*/
\n\n
const PSD = require('psd');
\n\n
export async function getTree(psdFilePath) {\n
\t
const psd = await PSD.open(psdFilePath);
\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*
\n
* 导出exml
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import {walkNode, walkObject} from
\"
./utils
\"
;
\n
import xml from
\"
xml
\"
;
\n
import path from
\"
path
\"
;
\n
import fs from
\"
fs-extra
\"
;
\n\n
const elementTpls = {\n
\t
'e:Group': [],
\n\t
'e:Image': {_attr: {source: '
{
res}'}
}
,
\n\t
'e:Button': [
\n\t\t
{_attr: {label: '
{
1}',}
}
,
\n\t\t
{\n
\t\t\t
'e:skinName': [
\n\t\t\t\t
{\n
\t\t\t\t\t
'e:Skin': [
\n\t\t\t\t\t\t
{_attr: {states: 'up,down,disabled'}},
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Image': {_attr: {width: '100%', height: '100%', source: '
{
res}'}},\n\t\t\t\t\t\t
}
,
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Label': {_attr: {id: 'labelDisplay', horizontalCenter: '0', verticalCenter: '0'}},
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t
]
\n\t\t\t\t
}
\n\t\t\t
]
\n\t\t
}
\n\t
]
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const {skinFilePath, skinClassName, resPath, resGroupName} = options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
const exmlRoot = [
\n\t\t
{\n
\t\t\t
_attr: {\n
\t\t\t\t
class: skinClassName,
\n\t\t\t\t
width: tree.width,
\n\t\t\t\t
height: tree.height,
\n\t\t\t\t
'xmlns:e':
\"
http://ns.egret.com/eui
\"
,
\n\t\t\t\t
'xmlns:w':
\"
http://ns.egret.com/wing
\"
,
\n\t\t\t
},
\n\t\t
},
\n\t
];
\n\t
const exmlData = {\n
\t\t
'e:Skin': exmlRoot
\n\t
};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible} = node;
\n\t\t
let attributes = {width, height, alpha, visible};
\n\t\t
if (x !== 0) {\n
\t\t\t
attributes.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
attributes.y = y;
\n\t\t
}
\n\t\t
let element;
\n\t\t
let tagName;
\n\t\t
let imageResName;
\n\t\t
let params;
\n\n\t\t
let hasChild = node.hasOwnProperty('children');
\n\t\t
if (hasChild) {\n
\t\t\t
tagName = 'e:Group';
\n\t\t
} else {\n
\t\t\t
const nameParams = node.name.split('|');
\n\t\t\t
const nodeName = nameParams[0];
\n\n\t\t\t
attributes.name = nodeName;
\n\t\t\t
imageResName = resGroupName + '_' + nodeName;
\n\t\t\t
const imageFilePath = path.join(resPath, resGroupName + '_p', nodeName + '.png');
\n\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t
if (nameParams.length === 1) {\n
\t\t\t\t
tagName = 'e:Image';
\n\t\t\t
} else {\n
\t\t\t\t
params = nameParams[1].split(',');
\n\t\t\t\t
tagName = 'e:' + params[0];
\n\t\t\t
}
\n\n\t\t\t
//element[tagName] = {_attr: attributes};
\n\t\t
}
\n\n\t\t
let elementTpl = elementTpls[tagName];
\n\t\t
let elementContent;
\n\t\t
if (elementTpl) {\n
\t\t\t
elementContent = JSON.parse(JSON.stringify(elementTpl));
\n\t\t
} else {\n
\t\t\t
elementContent =
{
}\n\t\t
}
\n\t\t
element = {\n
\t\t\t
[tagName]: elementContent,
\n\t\t
};
\n\n\t\t
let attr;
\n\t\t
if (Array.isArray(elementContent)) {\n
\t\t\t
attr = elementContent.find(item => item._attr);
\n\t\t\t
if (!attr) {\n
\t\t\t\t
attr = {_attr:
{
}};\n\t\t\t\telementContent.unshift(attr);\n\t\t\t}\n\t\t
}
else {\n
\t\t\t
attr = elementContent;
\n\t\t
}
\n\n\t\t
Object.assign(attr._attr, attributes);
\n\n\t\t
if (imageResName) {\n
\t\t\t
await walkObject(element, function (key, value, obj) {\n
\t\t\t\t
if (value === '
{
res
}
') {\n
\t\t\t\t\t
obj[key] = imageResName;
\n\t\t\t\t
} else if (typeof value === 'string') {\n
\t\t\t\t\t
const result = value.match(/
{
(\\d+)
}
/g);
\n\t\t\t\t\t
if(result){\n
\t\t\t\t\t\t
for(let item of result){\n
\t\t\t\t\t\t\t
const pi = parseInt(item.match(/
{
(\\d+)
}
/)[1]);
\n\t\t\t\t\t\t\t
value = value.replace(item, params[pi])
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
obj[key] = value;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t
})
\n\t\t
}
\n\n\t\t
if (hasChild) {\n
\t\t\t
node.exmlNode = elementContent;
\n\t\t
}
\n\n\t\t
const exmlNode = parent.exmlNode || exmlRoot;
\n\t\t
exmlNode.push(element);
\n\t
});
\n\n\t
let exmlStr = xml(exmlData, {declaration: true, indent: true});
\n\t
await fs.ensureDir(path.dirname(skinFilePath));
\n\t
await fs.writeFile(skinFilePath, exmlStr);
\n\n
}"
,
"/**
\n
* Created by rockyl on 2019-09-26.
\n
*
\n
* 导出zeroing的视图
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import fs from
\"
fs-extra
\"
;
\n\n
export async function execute(psdFile, options) {\n
\t
const
{
\n\t\timagesPath,\n\t
}
= options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile, '.psd'),
\n\t\t
type: 'node',
\n\t
};
\n\n\t
const assets = [];
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible, origin: {layer: {typeTool, solidColor}}} = node;
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\t\t
let viewNode = {\n
\t\t\t
name: node.name,
\n\t\t\t
properties,
\n\t\t
};
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if(typeTool){\n
\t\t\t
let fontInfo= typeTool();
\n\t\t\t
const fonts = fontInfo.fonts();
\n\t\t\t
const styles = fontInfo.styles();
\n\t\t\t
const
{
RunLengthArray
}
= fontInfo.engineData.EngineDict.StyleRun;
\n\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
properties.textflow = {\n
\t\t\t\t
fonts, styles, RunLengthArray,
\n\t\t\t
};
\n\t\t\t
viewNode.type = 'label';
\n\t\t
}else if(solidColor){\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
viewNode.type = 'rect';
\n\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t
}else{\n
\t\t\t
if(node.hasOwnProperty('children')){\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
}else{\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
const uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
properties.source = 'asset|' + uuid;
\n\n\t\t\t\t
const imageFilePath = path.join(imagesPath, uuid + ext);
\n\t\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t\t
assets.push({\n
\t\t\t\t\t
name: uuid,
\n\t\t\t\t\t
ext,
\n\t\t\t\t\t
uuid,
\n\t\t\t\t
});
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
return {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
}
\n
}
\n
"
],
"names"
:
[
"execute"
],
"mappings"
:
"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"
}
\ No newline at end of file
{
"version"
:
3
,
"file"
:
"index.umd.js"
,
"sources"
:
[
"../src/psd-tree.js"
,
"../src/utils.js"
,
"../src/egret.js"
,
"../src/zeroing.js"
],
"sourcesContent"
:
[
"/**
\n
* Created by rockyl on 2019-08-09.
\n
*/
\n\n
const PSD = require('psd');
\n\n
export async function getTree(psdFilePath) {\n
\t
const psd = await PSD.open(psdFilePath);
\n\t
const root = {};
\n\t
walk(psd.tree(), root);
\n\n\t
return root;
\n
}
\n\n
function walk(psNode, dataNode) {\n
\t
const {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};
\n\t
const {left, top, width, height, name, layer: {opacity, visible}} = psNode;
\n\t
const x = left - pLeft;
\n\t
const y = top - pTop;
\n\n\t
Object.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});
\n\t
if (psNode.children() && psNode.children().length > 0){\n
\t\t
dataNode.children = [];
\n\t
}
\n\n\t
let children = psNode.children();
\n\t
for (let i = children.length - 1; i >= 0; i--) {\n
\t\t
const childPsNode = children[i];
\n\n\t\t
const childDataNode = {};
\n\t\t
dataNode.children.push(childDataNode);
\n\t\t
walk(childPsNode, childDataNode)
\n\t
}
\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*/
\n\n
export async function walkNode(node, callback, includeSelf = false) {\n
\t
if (includeSelf) {\n
\t\t
await callback(node, null);
\n\t
}
\n\t
if (node.children && node.children.length > 0) {\n
\t\t
for (let childNode of node.children) {\n
\t\t\t
await callback(childNode, node);
\n\t\t\t
const result = await walkNode(childNode, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n\n
export async function walkObject(obj, callback) {\n
\t
if(typeof obj ===
\"
object
\"
){\n
\t\t
for (let key of Object.keys(obj)) {\n
\t\t\t
const value = obj[key];
\n\t\t\t
await callback(key, value, obj);
\n\t\t\t
const result = await walkObject(value, callback);
\n\t\t\t
if (result === true)
{
\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n
}
\n
"
,
"/**
\n
* Created by rockyl on 2019-08-10.
\n
*
\n
* 导出exml
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import {walkNode, walkObject} from
\"
./utils
\"
;
\n
import xml from
\"
xml
\"
;
\n
import path from
\"
path
\"
;
\n
import fs from
\"
fs-extra
\"
;
\n\n
const elementTpls = {\n
\t
'e:Group': [],
\n\t
'e:Image': {_attr: {source: '
{
res}'}
}
,
\n\t
'e:Button': [
\n\t\t
{_attr: {label: '
{
1}',}
}
,
\n\t\t
{\n
\t\t\t
'e:skinName': [
\n\t\t\t\t
{\n
\t\t\t\t\t
'e:Skin': [
\n\t\t\t\t\t\t
{_attr: {states: 'up,down,disabled'}},
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Image': {_attr: {width: '100%', height: '100%', source: '
{
res}'}},\n\t\t\t\t\t\t
}
,
\n\t\t\t\t\t\t
{\n
\t\t\t\t\t\t\t
'e:Label': {_attr: {id: 'labelDisplay', horizontalCenter: '0', verticalCenter: '0'}},
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t
]
\n\t\t\t\t
}
\n\t\t\t
]
\n\t\t
}
\n\t
]
\n
};
\n\n
export async function execute(psdFile, options) {\n
\t
const {skinFilePath, skinClassName, resPath, resGroupName} = options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
const exmlRoot = [
\n\t\t
{\n
\t\t\t
_attr: {\n
\t\t\t\t
class: skinClassName,
\n\t\t\t\t
width: tree.width,
\n\t\t\t\t
height: tree.height,
\n\t\t\t\t
'xmlns:e':
\"
http://ns.egret.com/eui
\"
,
\n\t\t\t\t
'xmlns:w':
\"
http://ns.egret.com/wing
\"
,
\n\t\t\t
},
\n\t\t
},
\n\t
];
\n\t
const exmlData = {\n
\t\t
'e:Skin': exmlRoot
\n\t
};
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {x, y, width, height, alpha, visible} = node;
\n\t\t
let attributes = {width, height, alpha, visible};
\n\t\t
if (x !== 0) {\n
\t\t\t
attributes.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
attributes.y = y;
\n\t\t
}
\n\t\t
let element;
\n\t\t
let tagName;
\n\t\t
let imageResName;
\n\t\t
let params;
\n\n\t\t
let hasChild = node.hasOwnProperty('children');
\n\t\t
if (hasChild) {\n
\t\t\t
tagName = 'e:Group';
\n\t\t
} else {\n
\t\t\t
const nameParams = node.name.split('|');
\n\t\t\t
const nodeName = nameParams[0];
\n\n\t\t\t
attributes.name = nodeName;
\n\t\t\t
imageResName = resGroupName + '_' + nodeName;
\n\t\t\t
const imageFilePath = path.join(resPath, resGroupName + '_p', nodeName + '.png');
\n\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t
await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t
if (nameParams.length === 1) {\n
\t\t\t\t
tagName = 'e:Image';
\n\t\t\t
} else {\n
\t\t\t\t
params = nameParams[1].split(',');
\n\t\t\t\t
tagName = 'e:' + params[0];
\n\t\t\t
}
\n\n\t\t\t
//element[tagName] = {_attr: attributes};
\n\t\t
}
\n\n\t\t
let elementTpl = elementTpls[tagName];
\n\t\t
let elementContent;
\n\t\t
if (elementTpl) {\n
\t\t\t
elementContent = JSON.parse(JSON.stringify(elementTpl));
\n\t\t
} else {\n
\t\t\t
elementContent =
{
}\n\t\t
}
\n\t\t
element = {\n
\t\t\t
[tagName]: elementContent,
\n\t\t
};
\n\n\t\t
let attr;
\n\t\t
if (Array.isArray(elementContent)) {\n
\t\t\t
attr = elementContent.find(item => item._attr);
\n\t\t\t
if (!attr) {\n
\t\t\t\t
attr = {_attr:
{
}};\n\t\t\t\telementContent.unshift(attr);\n\t\t\t}\n\t\t
}
else {\n
\t\t\t
attr = elementContent;
\n\t\t
}
\n\n\t\t
Object.assign(attr._attr, attributes);
\n\n\t\t
if (imageResName) {\n
\t\t\t
await walkObject(element, function (key, value, obj) {\n
\t\t\t\t
if (value === '
{
res
}
') {\n
\t\t\t\t\t
obj[key] = imageResName;
\n\t\t\t\t
} else if (typeof value === 'string') {\n
\t\t\t\t\t
const result = value.match(/
{
(\\d+)
}
/g);
\n\t\t\t\t\t
if(result){\n
\t\t\t\t\t\t
for(let item of result){\n
\t\t\t\t\t\t\t
const pi = parseInt(item.match(/
{
(\\d+)
}
/)[1]);
\n\t\t\t\t\t\t\t
value = value.replace(item, params[pi])
\n\t\t\t\t\t\t
}
\n\t\t\t\t\t\t
obj[key] = value;
\n\t\t\t\t\t
}
\n\t\t\t\t
}
\n\t\t\t
})
\n\t\t
}
\n\n\t\t
if (hasChild) {\n
\t\t\t
node.exmlNode = elementContent;
\n\t\t
}
\n\n\t\t
const exmlNode = parent.exmlNode || exmlRoot;
\n\t\t
exmlNode.push(element);
\n\t
});
\n\n\t
let exmlStr = xml(exmlData, {declaration: true, indent: true});
\n\t
await fs.ensureDir(path.dirname(skinFilePath));
\n\t
await fs.writeFile(skinFilePath, exmlStr);
\n\n
}"
,
"/**
\n
* Created by rockyl on 2019-09-26.
\n
*
\n
* 导出zeroing的视图
\n
*/
\n\n
import
{
getTree
}
from
\"
./psd-tree
\"
;
\n
import
{
walkNode
}
from
\"
./utils
\"
;
\n
import path from 'path'
\n
import Color from 'color'
\n
import generateUUID from 'uuid/v4'
\n
import fs from
\"
fs-extra
\"
;
\n
import hash from 'object-hash';
\n\n
export async function execute(psdFile, options) {\n
\t
const
{
\n\t\timagesPath,\n\t
}
= options;
\n\n\t
const tree = await getTree(psdFile);
\n\n\t
let viewRoot = {\n
\t\t
name: path.basename(psdFile, '.psd'),
\n\t\t
type: 'node',
\n\t\t
uuid: generateUUID(),
\n\t
};
\n\n\t
const assets = [];
\n\n\t
await walkNode(tree, async function (node, parent) {\n
\t\t
const {name, x, y, width, height, alpha, visible, origin: {layer: {typeTool, solidColor}}} = node;
\n\t\t
let properties = {\n
\t\t\t
width, height, alpha, visible,
\n\t\t
};
\n\t\t
let viewNode = {\n
\t\t\t
name,
\n\t\t\t
properties,
\n\t\t\t
uuid: generateUUID(),
\n\t\t
};
\n\t\t
if (x !== 0) {\n
\t\t\t
properties.x = x;
\n\t\t
}
\n\t\t
if (y !== 0) {\n
\t\t\t
properties.y = y;
\n\t\t
}
\n\n\t\t
if (typeTool) {\n
\t\t\t
let fontInfo = typeTool();
\n\t\t\t
const fonts = fontInfo.fonts();
\n\t\t\t
const styles = fontInfo.styles();
\n\t\t\t
const
{
RunLengthArray
}
= fontInfo.engineData.EngineDict.StyleRun;
\n\n\t\t\t
properties.text = fontInfo.textValue;
\n\t\t\t
properties.textflow = {\n
\t\t\t\t
fonts, styles, RunLengthArray,
\n\t\t\t
};
\n\t\t\t
viewNode.type = 'label';
\n\t\t
} else if (solidColor) {\n
\t\t\t
const {r, g, b} = solidColor();
\n\t\t\t
let color = Color({r, g, b});
\n\n\t\t\t
viewNode.type = 'rect';
\n\t\t\t
properties.fillColor = '#' + color.rgbNumber().toString(16);
\n\t\t
} else {\n
\t\t\t
if (node.hasOwnProperty('children')) {\n
\t\t\t\t
viewNode.type = 'node';
\n\t\t\t
} else {\n
\t\t\t\t
viewNode.type = 'image';
\n\n\t\t\t\t
const uuid = generateUUID();
\n\t\t\t\t
const ext = '.png';
\n\n\t\t\t\t
properties.source = 'asset|' + uuid;
\n\n\t\t\t\t
const imageFilePath = path.join(imagesPath, uuid + ext);
\n\t\t\t\t
await fs.ensureDir(path.dirname(imageFilePath));
\n\t\t\t\t
let png = node.origin.toPng();
\n\t\t\t\t
let buffer = await savePng(png, imageFilePath);
\n\t\t\t\t
//await node.origin.saveAsPng(imageFilePath);
\n\n\t\t\t\t
const hashFileName = hash(buffer);
\n\t\t\t\t
const hashFilePath = path.join(imagesPath, hashFileName + ext);
\n\t\t\t\t
await fs.rename(imageFilePath, hashFilePath);
\n\n\t\t\t\t
assets.push({\n
\t\t\t\t\t
name,
\n\t\t\t\t\t
ext,
\n\t\t\t\t\t
uuid,
\n\t\t\t\t\t
hash: hashFileName,
\n\t\t\t\t
});
\n\t\t\t
}
\n\t\t
}
\n\n\t\t
let viewParent = parent.view || viewRoot;
\n\t\t
if (!viewParent.hasOwnProperty('children')) {\n
\t\t\t
viewParent.children = [];
\n\t\t
}
\n\t\t
viewParent.children.push(viewNode);
\n\n\t\t
node.view = viewNode;
\n\t
});
\n\n\t
return {\n
\t\t
view: viewRoot,
\n\t\t
assets,
\n\t
}
\n
}
\n\n
function savePng(png, output) {\n
\t
return new Promise((resolve, reject) => {\n
\t\t
let buffer, buffers = [];
\n\t\t
png.pack()
\n\t\t\t
.on('error', reject)
\n\t\t\t
.on('data', (data) => buffers.push(data))
\n\t\t\t
.on('end', () => {\n
\t\t\t\t
buffer = Buffer.concat(buffers)
\n\t\t\t
})
\n\t\t\t
.pipe(fs.createWriteStream(output))
\n\t\t\t
.on('finish', () =>
{
\n\t\t\t\tresolve(buffer);\n\t\t\t});\n\t});\n}\n"],"names":["execute"],"mappings":";;;;;;;;;;;;;CAAA;CACA;CACA;;CAEA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;;AAE3B,CAAO,eAAe,OAAO,CAAC,WAAW,EAAE;CAC3C,CAAC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;CACzC,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;CACjB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;;CAExB,CAAC,OAAO,IAAI,CAAC;CACb,CAAC;;CAED,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;CAChC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;CAC/D,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;CAC5E,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;CACxB,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;;CAEtB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3J,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;CACvD,EAAE,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;CACzB,EAAE;;CAEF,CAAC,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;CAClC,CAAC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;CAChD,EAAE,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;CAElC,EAAE,MAAM,aAAa,GAAG,EAAE,CAAC;CAC3B,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;CACxC,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,EAAC;CAClC,EAAE;CACF,CAAC;;CCjCD;CACA;CACA;;AAEA,CAAO,eAAe,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,GAAG,KAAK,EAAE;CACpE,CAAC,IAAI,WAAW,EAAE;CAClB,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;CAC7B,EAAE;CACF,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;CAChD,EAAE,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;CACvC,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;CACnC,GAAG,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;CACtD,GAAG,IAAI,MAAM,KAAK,IAAI,EAAE;CACxB,IAAI,MAAM;CACV,IAAI;CACJ,GAAG;CACH,EAAE;CACF,CAAC;;AAED,CAAO,eAAe,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE;CAChD,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC;CAC5B,EAAE,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;CACpC,GAAG,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;CAC1B,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;CACnC,GAAG,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;CACpD,GAAG,IAAI,MAAM,KAAK,IAAI,EAAE;CACxB,IAAI,MAAM;CACV,IAAI;CACJ,GAAG;CACH,EAAE;CACF,CAAC;;CC9BD;CACA;CACA;CACA;CACA;AACA,AAMA;CACA,MAAM,WAAW,GAAG;CACpB,CAAC,SAAS,EAAE,EAAE;CACd,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC,UAAU,EAAE;CACb,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;CAC1B,EAAE;CACF,GAAG,YAAY,EAAE;CACjB,IAAI;CACJ,KAAK,QAAQ,EAAE;CACf,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC3C,MAAM;CACN,OAAO,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3E,OAAO;CACP,MAAM;CACN,OAAO,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;CAC3F,OAAO;CACP,MAAM;CACN,KAAK;CACL,IAAI;CACJ,GAAG;CACH,EAAE;CACF,CAAC,CAAC;;AAEF,CAAO,eAAe,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;CAChD,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC;;CAEtE,CAAC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;;CAErC,CAAC,MAAM,QAAQ,GAAG;CAClB,EAAE;CACF,GAAG,KAAK,EAAE;CACV,IAAI,KAAK,EAAE,aAAa;CACxB,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK;CACrB,IAAI,MAAM,EAAE,IAAI,CAAC,MAAM;CACvB,IAAI,SAAS,EAAE,yBAAyB;CACxC,IAAI,SAAS,EAAE,0BAA0B;CACzC,IAAI;CACJ,GAAG;CACH,EAAE,CAAC;CACH,CAAC,MAAM,QAAQ,GAAG;CAClB,EAAE,QAAQ,EAAE,QAAQ;CACpB,EAAE,CAAC;;CAEH,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,gBAAgB,IAAI,EAAE,MAAM,EAAE;CACpD,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACrD,EAAE,IAAI,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;CACnD,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;CACf,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;CACpB,GAAG;CACH,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;CACf,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;CACpB,GAAG;CACH,EAAE,IAAI,OAAO,CAAC;CACd,EAAE,IAAI,OAAO,CAAC;CACd,EAAE,IAAI,YAAY,CAAC;CACnB,EAAE,IAAI,MAAM,CAAC;;CAEb,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;CACjD,EAAE,IAAI,QAAQ,EAAE;CAChB,GAAG,OAAO,GAAG,SAAS,CAAC;CACvB,GAAG,MAAM;CACT,GAAG,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAC3C,GAAG,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;;CAElC,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;CAC9B,GAAG,YAAY,GAAG,YAAY,GAAG,GAAG,GAAG,QAAQ,CAAC;CAChD,GAAG,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;CACpF,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;CACnD,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;;CAE9C,GAAG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;CAChC,IAAI,OAAO,GAAG,SAAS,CAAC;CACxB,IAAI,MAAM;CACV,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CACtC,IAAI,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CAC/B,IAAI;;CAEJ;CACA,GAAG;;CAEH,EAAE,IAAI,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;CACxC,EAAE,IAAI,cAAc,CAAC;CACrB,EAAE,IAAI,UAAU,EAAE;CAClB,GAAG,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;CAC3D,GAAG,MAAM;CACT,GAAG,cAAc,GAAG,GAAE;CACtB,GAAG;CACH,EAAE,OAAO,GAAG;CACZ,GAAG,CAAC,OAAO,GAAG,cAAc;CAC5B,GAAG,CAAC;;CAEJ,EAAE,IAAI,IAAI,CAAC;CACX,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;CACrC,GAAG,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;CAClD,GAAG,IAAI,CAAC,IAAI,EAAE;CACd,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;CACvB,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC,IAAI;CACJ,GAAG,MAAM;CACT,GAAG,IAAI,GAAG,cAAc,CAAC;CACzB,GAAG;;CAEH,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;;CAExC,EAAE,IAAI,YAAY,EAAE;CACpB,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;CACxD,IAAI,IAAI,KAAK,KAAK,OAAO,EAAE;CAC3B,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;CAC7B,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;CAC1C,KAAK,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;CAC5C,KAAK,GAAG,MAAM,CAAC;CACf,MAAM,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC;CAC7B,OAAO,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACrD,OAAO,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAC;CAC9C,OAAO;CACP,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CACvB,MAAM;CACN,KAAK;CACL,IAAI,EAAC;CACL,GAAG;;CAEH,EAAE,IAAI,QAAQ,EAAE;CAChB,GAAG,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;CAClC,GAAG;;CAEH,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC;CAC/C,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;CACzB,EAAE,CAAC,CAAC;;CAEJ,CAAC,IAAI,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;CAChE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CAChD,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;;CAE3C;;CCjJA;CACA;CACA;CACA;CACA;AACA,AAQA;AACA,CAAO,eAAeA,SAAO,CAAC,OAAO,EAAE,OAAO,EAAE;CAChD,CAAC,MAAM;CACP,EAAE,UAAU;CACZ,EAAE,GAAG,OAAO,CAAC;;CAEb,CAAC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;;CAErC,CAAC,IAAI,QAAQ,GAAG;CAChB,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACtC,EAAE,IAAI,EAAE,MAAM;CACd,EAAE,IAAI,EAAE,YAAY,EAAE;CACtB,EAAE,CAAC;;CAEH,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;;CAEnB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,gBAAgB,IAAI,EAAE,MAAM,EAAE;CACpD,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACpG,EAAE,IAAI,UAAU,GAAG;CACnB,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAChC,GAAG,CAAC;CACJ,EAAE,IAAI,QAAQ,GAAG;CACjB,GAAG,IAAI;CACP,GAAG,UAAU;CACb,GAAG,IAAI,EAAE,YAAY,EAAE;CACvB,GAAG,CAAC;CACJ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;CACf,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;CACpB,GAAG;CACH,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;CACf,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;CACpB,GAAG;;CAEH,EAAE,IAAI,QAAQ,EAAE;CAChB,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;CAC7B,GAAG,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;CAClC,GAAG,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;CACpC,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;;CAEpE,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;CACxC,GAAG,UAAU,CAAC,QAAQ,GAAG;CACzB,IAAI,KAAK,EAAE,MAAM,EAAE,cAAc;CACjC,IAAI,CAAC;CACL,GAAG,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;CAC3B,GAAG,MAAM,IAAI,UAAU,EAAE;CACzB,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC;CAClC,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;CAEhC,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;CAC1B,GAAG,UAAU,CAAC,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;CAC/D,GAAG,MAAM;CACT,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;CACxC,IAAI,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;CAC3B,IAAI,MAAM;CACV,IAAI,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;;CAE5B,IAAI,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;CAChC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC;;CAEvB,IAAI,UAAU,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;;CAExC,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;CAC5D,IAAI,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;CACpD,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;CAClC,IAAI,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;CACnD;;CAEA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;CACtC,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,GAAG,GAAG,CAAC,CAAC;CACnE,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;;CAEjD,IAAI,MAAM,CAAC,IAAI,CAAC;CAChB,KAAK,IAAI;CACT,KAAK,GAAG;CACR,KAAK,IAAI;CACT,KAAK,IAAI,EAAE,YAAY;CACvB,KAAK,CAAC,CAAC;CACP,IAAI;CACJ,GAAG;;CAEH,EAAE,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;CAC3C,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;CAC9C,GAAG,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC;CAC5B,GAAG;CACH,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;CAErC,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;CACvB,EAAE,CAAC,CAAC;;CAEJ,CAAC,OAAO;CACR,EAAE,IAAI,EAAE,QAAQ;CAChB,EAAE,MAAM;CACR,EAAE;CACF,CAAC;;CAED,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE;CAC9B,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;CACzC,EAAE,IAAI,MAAM,EAAE,OAAO,GAAG,EAAE,CAAC;CAC3B,EAAE,GAAG,CAAC,IAAI,EAAE;CACZ,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;CACvB,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAC5C,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM;CACpB,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAC;CACnC,IAAI,CAAC;CACL,IAAI,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;CACtC,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM;CACvB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB,IAAI,CAAC,CAAC;CACN,EAAE,CAAC,CAAC;CACJ,CAAC;;;;;;;;;;;;;;"
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment