-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathlua2ts.py
More file actions
86 lines (80 loc) · 4.21 KB
/
lua2ts.py
File metadata and controls
86 lines (80 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#encoding: UTF-8
import re
import sys
filePath = sys.argv[1]
# filePath = "ActivityCtrl"
# 检查是否为Unity转cc
isU2cc = '-u2cc' in sys.argv
with open(filePath + ".lua", "r") as f:
print filePath
file = f.read()
className = filePath
if className:
print "export class", className
# 块注释
result = re.sub(r"--\[\[((.*\n)*?.*?)\]\]", "/*\\1*/", file)
# 类
result = re.sub(r"\b(.*) = \{\}\nlocal this = \1\n", "export class " + className + "{\n", result)
result = re.sub(r"" + className + "\.", "this.", result)
# 局部变量
result = re.sub(r"[\t|\s]local(.*=)", "\tlet\\1", result)
# 成员变量
result = re.sub(r"\blocal m_(.*)", "private _\\1", result)
result = re.sub(r"([^(private)]) m_(\w+)", "\\1this._\\2", result)
if isU2cc:
result = re.sub(r"_transform", "node", result)
# 整体缩进
result = re.sub(r"\n", "\n\t", result)
# 类结束
result = result + "\n}"
# 符号
result = re.sub(r"\n\t*\band\b", "&&", result)
result = re.sub(r"\sand\s", " && ", result)
result = re.sub(r"\n\t*\bor\b", "||", result)
result = re.sub(r"\sor\s", " || ", result)
result = re.sub(r"\bnot ", "!", result)
result = re.sub(r"\.\.", "+", result)
result = re.sub(r"~=", "!=", result)
result = re.sub(r"#((\w|\.)*)", "\\1.length", result)
# for if
result = re.sub(r"\bfor (\w)( = \d),\s*(.*)\s*do", "for (let \\1\\2; \\1 < \\3; ++\\1) {", result)
result = re.sub(r"\bif((.*\n)*?.*?)then", "if (\\1) {", result)
result = re.sub(r"\belseif(.*)then", "} else if (\\1) {", result)
result = re.sub(r"\belse(\t*)\n", "} else {\n", result)
result = re.sub(r"--(.*\n)", "//\\1", result)
result = re.sub(r"\bend\s*\n", "}\n", result)
# 函数
result = re.sub(r"\bfunction " + className + r"[\.|:](.*)", "\\1 {", result)
result = re.sub(r"\bfunction this[\.|:](.*)", "\\1 {", result)
result = re.sub(r"(\bfunction\(.*\))(.*)\n", "\\1{\\2\n", result)
result = re.sub(r"end(,|\)|\s.*)", "}\\1", result)
result = re.sub(r"New(\(\) {)", "constructor\\1", result)
result = re.sub(r"string\.gsub\((.*?), (.*?), (.*)\)", "\\1.replace(\\2, \\3)", result)
result = re.sub(r"string\.find\((.*),([^\)]*)\)", "\\1.includes(\\2)", result)
result = re.sub(r"[\t|\s]log\(", "console.log(", result)
if isU2cc:
result = re.sub(r":GetComponent", ".getComponent", result)
result = re.sub(r"'UILabel'", "cc.Label", result)
result = re.sub(r"\.text = ", ".string = ", result)
result = re.sub(r"'UIScrollView'", "cc.ScrollView", result)
result = re.sub(r"\.gameObject", "", result)
result = re.sub(r"\.transform", "", result)
result = re.sub(r":Find\(\"(.*)\"", ":Find('\\1'",result)
result = re.sub(r"(\w+(\.\w+)*?):Find\(('\w+(\/\w+)+')\)", "cc.find(\\3, \\1)", result)
result = re.sub(r"(\w+(\.\w+)*?):Find\(('.*')\)", "\\1.getChildByName(\\3)", result)
result = re.sub(r":SetActive\((.*)\)", ".active = \\1", result)
result = re.sub(r"\.activeSelf", ".active", result)
result = re.sub(r":GetChild\((.*)\)", ".children[\\1]", result)
# 自用
result = re.sub(r"Util.ClearChild\((.*)\)", "\\1.removeAllChildren()", result)
result = re.sub(r"NGUITools.AddChild", "Utils.addChild", result)
result = re.sub(r"\w(.*):AddClick\((.*),(.*this\.(\w+))\)", 'Utils.addClickEvent(\\2, this.node, \'' + className + '\', \'\\4\')', result)
result = re.sub(r"\btonumber\(", "Number(", result)
result = re.sub(r"\btostring\(", "String(", result)
result = re.sub(r"LuaTableManager\.AddTable", "DataTable.loadTable", result)
result = re.sub(r"\blog(\(.*\))", "console.log\\1", result)
result = re.sub(r"\bUI_SystemPrompt.Open_Prompt_\d", "cc.vv.alert", result)
# nil 转 null
result = re.sub(r"nil", "null", result)
with open(filePath + ".ts", "w") as f:
f.write(result)