func Run(param Parameter) bool { // 输入协议二进制描述文件,通过protoc配合github.com/davyxu/pbmeta/protoc-gen-meta插件导出 // 创建描述文件池 pool, err := pbmeta.CreatePoolByFile(param.PBFile) if err != nil { fmt.Println(err) return false } var patchFile *PatchFile if param.PatchFile != "" { patchFile = NewPatchFile(pool) if !patchFile.Load(param.PatchFile) { return false } log.Infof("patch file loaded: %s", param.PatchFile) } return util.ParallelWorker(param.InputFileList, param.ParaMode, func(in interface{}) bool { input := in.(string) var ext string var writer printer.IPrinter switch param.Format { case "pbt": ext = ".pbt" writer = printer.NewPBTWriter() case "json": ext = ".json" writer = printer.NewJsonWriter() case "lua": ext = ".lua" writer = printer.NewLuaWriter() default: log.Errorf("unknown format '%s'", param.Format) return false } // 使用指定的导出文件夹,并更换电子表格输入文件的后缀名为pbt作为输出文件 outputFile := path.Join(param.OutDir, util.ChangeExtension(input, ext)) // 显示电子表格到导出文件 sheetDataArray := exportSheetMsg(pool, input) if sheetDataArray == nil { return false } if patchFile != nil { patchFile.Patch(sheetDataArray) } return printFile(sheetDataArray, outputFile, writer) }) }
func Run(g *printer.Globals) bool { if !g.PreExport() { return false } fileObjList := make([]interface{}, 0) log.Infof("==========%s==========", i18n.String(i18n.Run_CollectTypeInfo)) // 合并类型 for _, in := range g.InputFileList { inputFile := in.(string) file := NewFile(inputFile) if file == nil { return false } log.Infoln(filepath.Base(inputFile)) file.GlobalFD = g.FileDescriptor // 电子表格数据导出到Table对象 if !file.ExportLocalType() { return false } // 整合类型信息和数据 if !g.AddTypes(file.LocalFD) { return false } // 没有 if file.Header != nil { fileObjList = append(fileObjList, file) } } log.Infof("==========%s==========", i18n.String(i18n.Run_ExportSheetData)) // 导出表格 if !util.ParallelWorker(fileObjList, false, func(in interface{}) bool { file := in.(*File) log.Infoln(filepath.Base(file.FileName)) // 电子表格数据导出到Table对象 tab := file.ExportData() if tab == nil { return false } // 整合类型信息和数据 return g.AddContent(tab) }) { return false } // 根据各种导出类型, 调用各导出器导出 return g.Print() }