Skip to content

Commit 0c3aad1

Browse files
committed
添加: 生成主表结构
添加: 类型自由映射目标语言类型
1 parent 6db2dc3 commit 0c3aad1

35 files changed

+280
-88
lines changed

main.go

+13-5
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import (
88
"github.com/davyxu/tabtoy/v2/i18n"
99
"github.com/davyxu/tabtoy/v2/printer"
1010
"github.com/davyxu/tabtoy/v3"
11-
"github.com/davyxu/tabtoy/v3/genfile/gosrc"
12-
"github.com/davyxu/tabtoy/v3/genfile/json"
11+
"github.com/davyxu/tabtoy/v3/gen/gosrc"
12+
"github.com/davyxu/tabtoy/v3/gen/json"
1313
"github.com/davyxu/tabtoy/v3/model"
1414
"os"
1515
)
@@ -81,6 +81,7 @@ func main() {
8181
globals.Version = Version_v3
8282
globals.SymbolFile = *paramSymbolFile
8383
globals.PackageName = *paramPackageName
84+
globals.CombineStructName = *paramCombineStructName
8485

8586
for _, v := range flag.Args() {
8687
globals.InputFileList = append(globals.InputFileList, v)
@@ -92,11 +93,18 @@ func main() {
9293
}
9394

9495
if *paramJsonOut != "" {
95-
json.Generate(&globals, *paramJsonOut)
96+
err = json.Generate(&globals, *paramJsonOut)
9697
}
9798

98-
if *paramJsonOut != "" {
99-
gosrc.Generate(&globals, *paramGoOut)
99+
if err != nil {
100+
fmt.Println(err)
101+
}
102+
103+
if *paramGoOut != "" {
104+
err = gosrc.Generate(&globals, *paramGoOut)
105+
}
106+
if err != nil {
107+
fmt.Println(err)
100108
}
101109

102110
case "exportorv2", "v2":

v3/checker/TODO.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 需要实现的检查
2+
3+
## 重名系列
4+
- 全局类型重名
5+
- 字段重名
6+
7+
- 类型找不到

v3/example/ExampleData.xlsx

50.4 KB
Binary file not shown.

v3/example/ExampleType.xlsx

9.16 KB
Binary file not shown.

v3/example/Make.sh

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash
2+
CURR=`pwd`
3+
cd ../../../../../..
4+
export GOPATH=`pwd`
5+
cd ${CURR}
6+
go build -v -o ${GOPATH}/bin/tabtoy github.com/davyxu/tabtoy
7+
${GOPATH}/bin/tabtoy -mode=v3 -symbol=ExampleType.xlsx -go_out=golang_gen.go -json_out=json_gen.json -package=example ExampleData.xlsx

v3/example/golang_gen.go

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Generated by github.com/davyxu/tabtoy
2+
// DO NOT EDIT!!
3+
// Version: 3.0.0
4+
package example
5+
6+
// table: ExampleData
7+
type ActorType int32
8+
9+
const (
10+
ActorType_None = 0 //
11+
ActorType_Pharah = 1 // 法鸡
12+
ActorType_Junkrat = 2 // 狂鼠
13+
ActorType_Genji = 3 // 源氏
14+
ActorType_Mercy = 4 // 天使
15+
)
16+
17+
var (
18+
ActorTypeMapperValueByName = map[string]int32{
19+
"None": 0, //
20+
"Pharah": 1, // 法鸡
21+
"Junkrat": 2, // 狂鼠
22+
"Genji": 3, // 源氏
23+
"Mercy": 4, // 天使
24+
}
25+
26+
ActorTypeMapperNameByValue = map[int32]string{
27+
0: "None", //
28+
1: "Pharah", // 法鸡
29+
2: "Junkrat", // 狂鼠
30+
3: "Genji", // 源氏
31+
4: "Mercy", // 天使
32+
}
33+
)
34+
35+
// table: ExampleData
36+
type ExampleData struct {
37+
ID int32 // 任务ID
38+
Name string // 名称
39+
Rate float32 // 比例
40+
Type ActorType // 类型
41+
}

v3/example/json_gen.json

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"@Tool": "github.com/davyxu/tabtoy",
3+
"@Version": "3.0.0",
4+
"ExampleData":[
5+
{ "ID": 100, "Name": "扎克镇", "Rate": 3.14, "Type": 2 },
6+
{ "ID": 200, "Name": "阿努比斯神庙", "Rate": 1.2, "Type": 1 },
7+
{ "ID": 300, "Name": "花村", "Rate": 79.4, "Type": 3 },
8+
{ "ID": 400, "Name": "艾兴瓦尔德", "Rate": 0.63, "Type": 4 }
9+
]
10+
}
File renamed without changes.

v3/genfile/gosrc/gen.go v3/gen/gosrc/gen.go

+2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ package gosrc
33
import (
44
"github.com/davyxu/protoplus/codegen"
55
"github.com/davyxu/tabtoy/v3/model"
6+
"github.com/davyxu/tabtoy/v3/table"
67
)
78

89
func Generate(globals *model.Globals, fileName string) error {
910

1011
return codegen.NewCodeGen("gosrc").
1112
RegisterTemplateFunc(codegen.UsefulFunc).
13+
RegisterTemplateFunc(table.UsefulFunc).
1214
RegisterTemplateFunc(UsefulFunc).
1315
ParseTemplate(templateText, globals).
1416
FormatGoCode().

v3/genfile/gosrc/text.go v3/gen/gosrc/text.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ var (
2727
{{range $sn, $objName := $.Symbols.StructNames}}
2828
// table: {{$.Symbols.ObjectAtTable $objName}}
2929
type {{$objName}} struct{ {{range $fi,$field := $.Symbols.Fields $objName}}
30-
{{$field.FieldName}} {{$field.FieldType}} // {{$field.Name}} {{end}}
30+
{{$field.FieldName}} {{ConverToLanType $field.FieldType "go"}} // {{$field.Name}} {{end}}
3131
}
3232
{{end}}
3333
34-
35-
34+
// Combine struct
35+
type {{.CombineStructName}} struct { {{range $ti, $tab := $.Datas}}
36+
{{$tab.Name}} []{{$tab.Name}} // table: {{$tab.Name}} {{end}}
37+
}
3638
`
File renamed without changes.

v3/genfile/json/gen.go v3/gen/json/gen.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ func Generate(globals *model.Globals, fileName string) error {
1010
return codegen.NewCodeGen("json").
1111
RegisterTemplateFunc(codegen.UsefulFunc).
1212
RegisterTemplateFunc(UsefulFunc).
13-
ParseTemplate(templateText, globals).WriteOutputFile(fileName).Error()
13+
ParseTemplate(templateText, globals).
14+
WriteOutputFile(fileName).Error()
1415
}
File renamed without changes.

v3/model/datatab.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package model
22

3+
import "github.com/davyxu/tabtoy/v3/table"
4+
35
type DataRow []string
46

57
type DataTable struct {
6-
name string // 表名
7-
header []*TypeField // 列索引
8+
name string // 表名
9+
header []*table.TypeField // 列索引
810
rows []DataRow
911
}
1012

11-
func (self *DataTable) Header() []*TypeField {
13+
func (self *DataTable) Header() []*table.TypeField {
1214
return self.header
1315
}
1416

@@ -24,7 +26,7 @@ func (self *DataTable) MaxColumns() int {
2426
return len(self.header)
2527
}
2628

27-
func (self *DataTable) AddHeader(types *TypeField) {
29+
func (self *DataTable) AddHeader(types *table.TypeField) {
2830
self.header = append(self.header, types)
2931
}
3032

@@ -47,7 +49,7 @@ func (self *DataTable) GetValue(row, col int) string {
4749
return self.rows[row][col]
4850
}
4951

50-
func (self *DataTable) GetType(col int) *TypeField {
52+
func (self *DataTable) GetType(col int) *table.TypeField {
5153
return self.header[col]
5254
}
5355

v3/model/globals.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package model
22

33
type Globals struct {
4-
Version string
5-
SymbolFile string
6-
InputFileList []string
7-
PackageName string
4+
Version string
5+
SymbolFile string
6+
InputFileList []string
7+
PackageName string
8+
CombineStructName string // 包含最终表所有数据的根结构
89

910
Symbols SymbolTable
1011

v3/model/objtypes.go

-11
This file was deleted.

v3/model/symboltab.go

+16-15
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package model
22

33
import (
44
"github.com/ahmetb/go-linq"
5+
"github.com/davyxu/tabtoy/v3/table"
56
"strconv"
67
)
78

89
type SymbolTable struct {
9-
typeFields []*TypeField // 不是具体的类型
10+
typeFields []*table.TypeField // 不是具体的类型
1011
}
1112

12-
func (self *SymbolTable) AddField(tf *TypeField) {
13+
func (self *SymbolTable) AddField(tf *table.TypeField) {
1314
self.typeFields = append(self.typeFields, tf)
1415
}
1516

@@ -24,12 +25,12 @@ func (self *SymbolTable) IsEnumKind(tableName, objectType string) bool {
2425
// 匹配枚举值
2526
func (self *SymbolTable) ResolveEnumValue(tableName, objectType, value string) (ret string) {
2627

27-
linq.From(self.typeFields).WhereT(func(tf *TypeField) bool {
28+
linq.From(self.typeFields).WhereT(func(tf *table.TypeField) bool {
2829

2930
return tf.Table == tableName &&
3031
tf.ObjectType == objectType &&
3132
(tf.Name == value || tf.FieldName == value)
32-
}).ForEachT(func(types *TypeField) {
33+
}).ForEachT(func(types *table.TypeField) {
3334

3435
ret = types.DefaultValue
3536

@@ -41,10 +42,10 @@ func (self *SymbolTable) ResolveEnumValue(tableName, objectType, value string) (
4142
// 获取所有的结构体名
4243
func (self *SymbolTable) StructNames() (ret []string) {
4344

44-
linq.From(self.typeFields).WhereT(func(tf *TypeField) bool {
45+
linq.From(self.typeFields).WhereT(func(tf *table.TypeField) bool {
4546

4647
return tf.DefaultValue == ""
47-
}).SelectT(func(tf *TypeField) string {
48+
}).SelectT(func(tf *table.TypeField) string {
4849

4950
return tf.ObjectType
5051
}).Distinct().ToSlice(&ret)
@@ -55,10 +56,10 @@ func (self *SymbolTable) StructNames() (ret []string) {
5556
// 获取所有的枚举名
5657
func (self *SymbolTable) EnumNames() (ret []string) {
5758

58-
linq.From(self.typeFields).WhereT(func(tf *TypeField) bool {
59+
linq.From(self.typeFields).WhereT(func(tf *table.TypeField) bool {
5960

6061
return tf.FieldType == "int32" && isNumber(tf.DefaultValue)
61-
}).SelectT(func(tf *TypeField) string {
62+
}).SelectT(func(tf *table.TypeField) string {
6263

6364
return tf.ObjectType
6465
}).Distinct().ToSlice(&ret)
@@ -69,10 +70,10 @@ func (self *SymbolTable) EnumNames() (ret []string) {
6970
// 对象在的表名
7071
func (self *SymbolTable) ObjectAtTable(objName string) (ret string) {
7172

72-
linq.From(self.typeFields).WhereT(func(tf *TypeField) bool {
73+
linq.From(self.typeFields).WhereT(func(tf *table.TypeField) bool {
7374

7475
return tf.ObjectType == objName
75-
}).SelectT(func(tf *TypeField) string {
76+
}).SelectT(func(tf *table.TypeField) string {
7677

7778
return tf.Table
7879
}).Distinct().ForEachT(func(name string) {
@@ -85,9 +86,9 @@ func (self *SymbolTable) ObjectAtTable(objName string) (ret string) {
8586
}
8687

8788
// 对象的所有字段
88-
func (self *SymbolTable) Fields(objectType string) (ret []*TypeField) {
89+
func (self *SymbolTable) Fields(objectType string) (ret []*table.TypeField) {
8990

90-
linq.From(self.typeFields).WhereT(func(tf *TypeField) bool {
91+
linq.From(self.typeFields).WhereT(func(tf *table.TypeField) bool {
9192

9293
return tf.ObjectType == objectType
9394
}).ToSlice(&ret)
@@ -96,14 +97,14 @@ func (self *SymbolTable) Fields(objectType string) (ret []*TypeField) {
9697
}
9798

9899
// 数据表中表头对应类型表
99-
func (self *SymbolTable) QueryType(tableName, headerName string) (ret *TypeField) {
100+
func (self *SymbolTable) QueryType(tableName, headerName string) (ret *table.TypeField) {
100101

101-
linq.From(self.typeFields).WhereT(func(tf *TypeField) bool {
102+
linq.From(self.typeFields).WhereT(func(tf *table.TypeField) bool {
102103

103104
return tf.Table == tableName &&
104105
tf.ObjectType == tableName &&
105106
(tf.Name == headerName || tf.FieldName == headerName)
106-
}).ForEachT(func(types *TypeField) {
107+
}).ForEachT(func(types *table.TypeField) {
107108

108109
ret = types
109110

v3/symbolloader.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package v3
33
import (
44
"github.com/davyxu/tabtoy/util"
55
"github.com/davyxu/tabtoy/v3/model"
6+
"github.com/davyxu/tabtoy/v3/table"
67
"github.com/tealeg/xlsx"
78
)
89

@@ -20,7 +21,8 @@ func loadSymbols(globals *model.Globals, fileName string) error {
2021
break
2122
}
2223

23-
var objtype model.TypeField
24+
var objtype table.TypeField
25+
2426
objtype.Table = util.GetSheetValueString(sheet, row, 0)
2527
objtype.ObjectType = util.GetSheetValueString(sheet, row, 1)
2628
objtype.Name = util.GetSheetValueString(sheet, row, 2)

v3/table/BuiltinData.json

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"@Tool": "github.com/davyxu/tabtoy",
3+
"@Version": "3.0.0",
4+
"FieldType":[
5+
{ "InputFieldName": "int32", "GoFieldName": "int32", "CSFieldName": "Int32" },
6+
{ "InputFieldName": "int64", "GoFieldName": "int64", "CSFieldName": "Int64" },
7+
{ "InputFieldName": "int", "GoFieldName": "int32", "CSFieldName": "Int32" },
8+
{ "InputFieldName": "uint32", "GoFieldName": "uint32", "CSFieldName": "UInt32" },
9+
{ "InputFieldName": "uint64", "GoFieldName": "uint64", "CSFieldName": "UInt64" },
10+
{ "InputFieldName": "float", "GoFieldName": "float32", "CSFieldName": "float" },
11+
{ "InputFieldName": "double", "GoFieldName": "float64", "CSFieldName": "double" },
12+
{ "InputFieldName": "float32", "GoFieldName": "float32", "CSFieldName": "float" },
13+
{ "InputFieldName": "float64", "GoFieldName": "float64", "CSFieldName": "double" },
14+
{ "InputFieldName": "bool", "GoFieldName": "bool", "CSFieldName": "bool" },
15+
{ "InputFieldName": "string", "GoFieldName": "string", "CSFieldName": "string" },
16+
{ "InputFieldName": "字符串", "GoFieldName": "string", "CSFieldName": "string" },
17+
{ "InputFieldName": "整形", "GoFieldName": "int32", "CSFieldName": "Int32" },
18+
{ "InputFieldName": "浮点", "GoFieldName": "float32", "CSFieldName": "float" },
19+
{ "InputFieldName": "布尔", "GoFieldName": "bool", "CSFieldName": "bool" }
20+
]
21+
}

v3/table/BuiltinTypes.xlsx

8.98 KB
Binary file not shown.

v3/table/FieldType.xlsx

9.2 KB
Binary file not shown.

v3/table/Make.bat

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"c:\Program Files\Git\bin\bash.exe" --login -i .\Make.sh

v3/table/Make.sh

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/bin/bash
2+
3+
CURR=`pwd`
4+
cd ../../../../../..
5+
export GOPATH=`pwd`
6+
cd ${CURR}
7+
8+
go build -v -o ${GOPATH}/bin/tabtoy github.com/davyxu/tabtoy
9+
10+
# 导出内置的json文件
11+
${GOPATH}/bin/tabtoy \
12+
-mode=v3 \
13+
-symbol=BuiltinTypes.xlsx \
14+
-package=table \
15+
-go_out=buildintypes_gen.go \
16+
-json_out=BuiltinData.json \
17+
FieldType.xlsx
18+
19+
# json转go代码嵌入tabtoy
20+
JSONDATAFILE=jsondata_gen.go
21+
echo "package table" > ${JSONDATAFILE}
22+
echo "const builtinJson = \`" >> ${JSONDATAFILE}
23+
cat BuiltinData.json >> ${JSONDATAFILE}
24+
echo "\`" >> ${JSONDATAFILE}
25+
gofmt -s -w ${JSONDATAFILE}

0 commit comments

Comments
 (0)