lanhu-layer-tree 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/formatter.d.ts.map +1 -1
- package/dist/formatter.js +34 -2
- package/dist/formatter.js.map +1 -1
- package/package.json +1 -1
- package/src/formatter.ts +40 -2
package/README.md
CHANGED
|
@@ -210,12 +210,15 @@ lanhu refresh-cookie /path/to/.env
|
|
|
210
210
|
- `ImgIcon` → 提取资源名 `Icon.png`
|
|
211
211
|
- `Img_Button 拷贝 2` → 自动去除 "拷贝" 后缀
|
|
212
212
|
- `Img_Panel s9-10-10` → 九宫格参数 `s9[10,10]`
|
|
213
|
+
- `common_btn_zhuanniu - 智能对象组` → 输出为 `common_btn_zhuanniu`(去除中文后缀)
|
|
214
|
+
- `common_btn - 智能对象组 s9-3-3` → 输出为 `common_btn s9[3,3]`(保留九宫格参数)
|
|
213
215
|
|
|
214
216
|
### 过滤规则
|
|
215
217
|
- `参考图xxx` → 不导出
|
|
216
218
|
- `fexxx` → 不导出
|
|
217
|
-
-
|
|
218
|
-
- `
|
|
219
|
+
- sp 类型且以中文开头(如 `按钮图标`、`图层 3`)→ 不导出(完全过滤)
|
|
220
|
+
- sp 类型以英文开头(如 `common_btn - 智能对象组`)→ 导出但去除中文后缀
|
|
221
|
+
- `background` → 不解析 UUID(但会导出)
|
|
219
222
|
|
|
220
223
|
### 输出格式
|
|
221
224
|
|
package/dist/formatter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAsDnD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,EAAE,EACf,UAAU,GAAE,MAAe,EAC3B,WAAW,GAAE,MAAU,EACvB,YAAY,GAAE,MAAU,EACxB,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAiOR"}
|
package/dist/formatter.js
CHANGED
|
@@ -43,6 +43,7 @@ function reverseSiblingOrder(layers) {
|
|
|
43
43
|
return result;
|
|
44
44
|
}
|
|
45
45
|
const GROUP_TYPES = new Set(['group', 'layerGroup', 'artboard', 'layerSection']);
|
|
46
|
+
const CHINESE_REGEX = /[一-鿿]/;
|
|
46
47
|
/**
|
|
47
48
|
* 将图层列表格式化为树形结构
|
|
48
49
|
*/
|
|
@@ -66,7 +67,32 @@ function formatLayersTree(layers, designName = 'Root', canvasWidth = 0, canvasHe
|
|
|
66
67
|
// 过滤掉不需要导出的图层
|
|
67
68
|
const filteredLayers = layers.filter(layer => {
|
|
68
69
|
const name = layer.name.trim();
|
|
69
|
-
|
|
70
|
+
const ltype = layer.type || '';
|
|
71
|
+
// 过滤参考图和 fe 开头的图层
|
|
72
|
+
if (name.startsWith('参考图') || name.startsWith('fe')) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
// 过滤 sp 类型且全中文的图层
|
|
76
|
+
if (ltype !== 'textLayer' && !GROUP_TYPES.has(ltype)) {
|
|
77
|
+
// 移除 Img_ 或 Img 前缀后检查
|
|
78
|
+
let checkName = name;
|
|
79
|
+
if (checkName.startsWith('Img_')) {
|
|
80
|
+
checkName = checkName.slice(4);
|
|
81
|
+
}
|
|
82
|
+
else if (checkName.startsWith('Img')) {
|
|
83
|
+
checkName = checkName.slice(3);
|
|
84
|
+
}
|
|
85
|
+
// 移除拷贝和九宫格标记
|
|
86
|
+
checkName = checkName.replace(/\s*拷贝\s*\d*/g, '').trim();
|
|
87
|
+
checkName = checkName.replace(/\s+s9-\d+-\d+/g, '').trim();
|
|
88
|
+
// 移除 " - 中文" 或 " 中文" 后缀(用于检查是否全中文)
|
|
89
|
+
checkName = checkName.replace(/\s*[-\s]+[一-鿿㐀-䶿]+.*$/g, '').trim();
|
|
90
|
+
// 如果处理后的名称为空或以中文开头,则过滤掉
|
|
91
|
+
if (!checkName || CHINESE_REGEX.test(checkName.charAt(0))) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
70
96
|
});
|
|
71
97
|
// 翻转同级节点顺序
|
|
72
98
|
const reversedLayers = reverseSiblingOrder(filteredLayers);
|
|
@@ -77,8 +103,15 @@ function formatLayersTree(layers, designName = 'Root', canvasWidth = 0, canvasHe
|
|
|
77
103
|
reversedLayers.forEach((layer, idx) => {
|
|
78
104
|
const depth = layer.depth;
|
|
79
105
|
let name = layer.name;
|
|
106
|
+
const ltype = layer.type;
|
|
80
107
|
// 过滤掉名称中的"拷贝"及其后面的数字部分
|
|
81
108
|
name = name.replace(/\s*拷贝\s*\d*/g, '').trim();
|
|
109
|
+
// 对于 sp 类型图层,先移除 " - 中文" 后缀(但保留九宫格标记)
|
|
110
|
+
if (ltype !== 'textLayer' && !GROUP_TYPES.has(ltype)) {
|
|
111
|
+
// 匹配 " - 中文" 但不包括 s9 标记
|
|
112
|
+
// 例如: "common_btn - 智能对象组 s9-3-3" → "common_btn s9-3-3"
|
|
113
|
+
name = name.replace(/\s*[-\s]+[一-鿿㐀-䶿]+[^s\d]*?(?=\s+s9-|\s*$)/g, '').trim();
|
|
114
|
+
}
|
|
82
115
|
// 提取九宫格参数(如 " s9-3-3" → [3,3])
|
|
83
116
|
let s9Params = null;
|
|
84
117
|
const s9Match = name.match(/\s+s9-(\d+)-(\d+)/);
|
|
@@ -87,7 +120,6 @@ function formatLayersTree(layers, designName = 'Root', canvasWidth = 0, canvasHe
|
|
|
87
120
|
}
|
|
88
121
|
// 过滤掉九宫格标记
|
|
89
122
|
name = name.replace(/\s+s9-\d+-\d+/g, '').trim();
|
|
90
|
-
const ltype = layer.type;
|
|
91
123
|
const width = layer.width;
|
|
92
124
|
const height = layer.height;
|
|
93
125
|
const absX = layer.x;
|
package/dist/formatter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/formatter.ts
CHANGED
|
@@ -50,6 +50,7 @@ function reverseSiblingOrder(layers: Layer[]): Layer[] {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
const GROUP_TYPES = new Set(['group', 'layerGroup', 'artboard', 'layerSection']);
|
|
53
|
+
const CHINESE_REGEX = /[一-鿿]/;
|
|
53
54
|
|
|
54
55
|
/**
|
|
55
56
|
* 将图层列表格式化为树形结构
|
|
@@ -81,7 +82,37 @@ export function formatLayersTree(
|
|
|
81
82
|
// 过滤掉不需要导出的图层
|
|
82
83
|
const filteredLayers = layers.filter(layer => {
|
|
83
84
|
const name = layer.name.trim();
|
|
84
|
-
|
|
85
|
+
const ltype = layer.type || '';
|
|
86
|
+
|
|
87
|
+
// 过滤参考图和 fe 开头的图层
|
|
88
|
+
if (name.startsWith('参考图') || name.startsWith('fe')) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 过滤 sp 类型且全中文的图层
|
|
93
|
+
if (ltype !== 'textLayer' && !GROUP_TYPES.has(ltype)) {
|
|
94
|
+
// 移除 Img_ 或 Img 前缀后检查
|
|
95
|
+
let checkName = name;
|
|
96
|
+
if (checkName.startsWith('Img_')) {
|
|
97
|
+
checkName = checkName.slice(4);
|
|
98
|
+
} else if (checkName.startsWith('Img')) {
|
|
99
|
+
checkName = checkName.slice(3);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// 移除拷贝和九宫格标记
|
|
103
|
+
checkName = checkName.replace(/\s*拷贝\s*\d*/g, '').trim();
|
|
104
|
+
checkName = checkName.replace(/\s+s9-\d+-\d+/g, '').trim();
|
|
105
|
+
|
|
106
|
+
// 移除 " - 中文" 或 " 中文" 后缀(用于检查是否全中文)
|
|
107
|
+
checkName = checkName.replace(/\s*[-\s]+[一-鿿㐀-䶿]+.*$/g, '').trim();
|
|
108
|
+
|
|
109
|
+
// 如果处理后的名称为空或以中文开头,则过滤掉
|
|
110
|
+
if (!checkName || CHINESE_REGEX.test(checkName.charAt(0))) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return true;
|
|
85
116
|
});
|
|
86
117
|
|
|
87
118
|
// 翻转同级节点顺序
|
|
@@ -96,10 +127,18 @@ export function formatLayersTree(
|
|
|
96
127
|
reversedLayers.forEach((layer, idx) => {
|
|
97
128
|
const depth = layer.depth;
|
|
98
129
|
let name = layer.name;
|
|
130
|
+
const ltype = layer.type;
|
|
99
131
|
|
|
100
132
|
// 过滤掉名称中的"拷贝"及其后面的数字部分
|
|
101
133
|
name = name.replace(/\s*拷贝\s*\d*/g, '').trim();
|
|
102
134
|
|
|
135
|
+
// 对于 sp 类型图层,先移除 " - 中文" 后缀(但保留九宫格标记)
|
|
136
|
+
if (ltype !== 'textLayer' && !GROUP_TYPES.has(ltype)) {
|
|
137
|
+
// 匹配 " - 中文" 但不包括 s9 标记
|
|
138
|
+
// 例如: "common_btn - 智能对象组 s9-3-3" → "common_btn s9-3-3"
|
|
139
|
+
name = name.replace(/\s*[-\s]+[一-鿿㐀-䶿]+[^s\d]*?(?=\s+s9-|\s*$)/g, '').trim();
|
|
140
|
+
}
|
|
141
|
+
|
|
103
142
|
// 提取九宫格参数(如 " s9-3-3" → [3,3])
|
|
104
143
|
let s9Params: [number, number] | null = null;
|
|
105
144
|
const s9Match = name.match(/\s+s9-(\d+)-(\d+)/);
|
|
@@ -110,7 +149,6 @@ export function formatLayersTree(
|
|
|
110
149
|
// 过滤掉九宫格标记
|
|
111
150
|
name = name.replace(/\s+s9-\d+-\d+/g, '').trim();
|
|
112
151
|
|
|
113
|
-
const ltype = layer.type;
|
|
114
152
|
const width = layer.width;
|
|
115
153
|
const height = layer.height;
|
|
116
154
|
const absX = layer.x;
|