247 lines
11 KiB
JavaScript
247 lines
11 KiB
JavaScript
|
"use strict";
|
|||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|||
|
exports.genCode = void 0;
|
|||
|
const CodeWriter_1 = require("./CodeWriter");
|
|||
|
function genCode(handler, calData) {
|
|||
|
let settings = handler.project.GetSettings("Publish").codeGeneration;
|
|||
|
let properties = handler.project.GetSettings("CustomProperties").elements;
|
|||
|
if (!properties.ContainsKey("NameSpace")) {
|
|||
|
console.error("请添加属性:NameSpace");
|
|||
|
}
|
|||
|
if (!properties.ContainsKey("ChineseToPinYin")) {
|
|||
|
console.error("请添加属性:ChineseToPinYin");
|
|||
|
}
|
|||
|
let namespaceName = properties.get_Item("NameSpace");
|
|||
|
let toPinYin = properties.get_Item("ChineseToPinYin") == "true";
|
|||
|
let codePkgName;
|
|||
|
if (toPinYin) {
|
|||
|
codePkgName = handler.ToFilename(handler.pkg.name); //convert chinese to pinyin, remove special chars etc.
|
|||
|
}
|
|||
|
else {
|
|||
|
if (RegExp(/^[\u4e00-\u9fa5_a-zA-Z][\u4e00-\u9fa5_a-zA-Z0-9]*$/).test(handler.pkg.name)) {
|
|||
|
codePkgName = handler.pkg.name;
|
|||
|
}
|
|||
|
else {
|
|||
|
console.error("名字包含非法字符:" + handler.pkg.name);
|
|||
|
}
|
|||
|
}
|
|||
|
let exportCodePath = handler.exportCodePath + '/' + codePkgName;
|
|||
|
//CollectClasses(stripeMemeber, stripeClass, fguiNamespace)
|
|||
|
let classes = handler.CollectClasses(true, false, null);
|
|||
|
handler.SetupCodeFolder(exportCodePath, "cs"); //check if target folder exists, and delete old files
|
|||
|
let getMemberByName = settings.getMemberByName;
|
|||
|
let classCnt = classes.Count;
|
|||
|
let writer = new CodeWriter_1.default();
|
|||
|
for (let i = 0; i < classCnt; i++) {
|
|||
|
let classInfo = classes.get_Item(i);
|
|||
|
let url = classInfo.res.GetURL();
|
|||
|
let data = calData.GetData(url);
|
|||
|
if (!data || !data.isGenerate) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
let className = classInfo.className;
|
|||
|
if (!toPinYin) {
|
|||
|
className = settings.classNamePrefix + classInfo.resName;
|
|||
|
if (!RegExp(/^[\u4e00-\u9fa5_a-zA-Z][\u4e00-\u9fa5_a-zA-Z0-9]*$/).test(className)) {
|
|||
|
console.error("名字包含非法字符:" + className);
|
|||
|
className = classInfo.className;
|
|||
|
}
|
|||
|
}
|
|||
|
let members = classInfo.members;
|
|||
|
writer.reset();
|
|||
|
writer.writeln('using FairyGUI;');
|
|||
|
writer.writeln('using FairyGUI.Utils;');
|
|||
|
writer.writeln('using DragonSoul.Shared;');
|
|||
|
writer.writeln('using System;');
|
|||
|
writer.writeln();
|
|||
|
writer.writeln('namespace %s', namespaceName);
|
|||
|
writer.startBlock();
|
|||
|
writer.writeln("public partial class %s", className);
|
|||
|
writer.startBlock();
|
|||
|
writer.writeln("public const string UIPackageName = \"%s\";", codePkgName);
|
|||
|
writer.writeln("public const string UIResName = \"%s\";", classInfo.resName);
|
|||
|
writer.writeln();
|
|||
|
writer.writeln("public %s self;", classInfo.superClassName);
|
|||
|
writer.writeln();
|
|||
|
let memberCnt = members.Count;
|
|||
|
// 是否为自定义类型组件标记数组
|
|||
|
// 是否为跨包组件标记数组
|
|||
|
let crossPackageFlagsArray = new Array(memberCnt);
|
|||
|
//是否生成代码
|
|||
|
let customTypeArray = new Array(memberCnt);
|
|||
|
let baseTypeNameArray = new Array(memberCnt);
|
|||
|
let memberTypeNameArray = new Array(memberCnt);
|
|||
|
for (let j = 0; j < memberCnt; j++) {
|
|||
|
let memberInfo = members.get_Item(j);
|
|||
|
crossPackageFlagsArray[j] = false;
|
|||
|
customTypeArray[j] = false;
|
|||
|
baseTypeNameArray[j] = memberInfo.type;
|
|||
|
memberTypeNameArray[j] = memberInfo.type;
|
|||
|
let hasRes = memberInfo.res != null;
|
|||
|
if (!hasRes) {
|
|||
|
customTypeArray[j] = false;
|
|||
|
}
|
|||
|
else {
|
|||
|
let url = memberInfo.res.GetURL();
|
|||
|
let data = calData.GetData(url);
|
|||
|
customTypeArray[j] = data && data.isGenerate;
|
|||
|
}
|
|||
|
let typeName = memberInfo.type;
|
|||
|
if (!toPinYin && memberInfo.res) {
|
|||
|
typeName = settings.classNamePrefix + memberInfo.res.name;
|
|||
|
if (!RegExp(/^[\u4e00-\u9fa5_a-zA-Z][\u4e00-\u9fa5_a-zA-Z0-9]*$/).test(typeName)) {
|
|||
|
console.error("名字包含非法字符:" + typeName);
|
|||
|
typeName = memberInfo.type;
|
|||
|
}
|
|||
|
}
|
|||
|
// 判断是不是跨包类型组件
|
|||
|
let crossPkg = hasRes ? memberInfo.res.owner.name != handler.pkg.name : false;
|
|||
|
crossPackageFlagsArray[j] = crossPkg;
|
|||
|
if (crossPkg) {
|
|||
|
if (!customTypeArray[j]) {
|
|||
|
for (let k = 0; k < classCnt; k++) {
|
|||
|
var __classInfo = classes.get_Item(k);
|
|||
|
if (memberInfo.res.name == __classInfo.resName) {
|
|||
|
console.log(111);
|
|||
|
typeName = __classInfo.superClassName;
|
|||
|
baseTypeNameArray[j] = typeName;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
typeName = baseTypeNameArray[j];
|
|||
|
memberTypeNameArray[j] = typeName;
|
|||
|
writer.writeln('public %s %s;', typeName, memberInfo.varName);
|
|||
|
}
|
|||
|
else {
|
|||
|
baseTypeNameArray[j] = typeName;
|
|||
|
memberTypeNameArray[j] = typeName;
|
|||
|
writer.writeln('public %s %s;', typeName, memberInfo.varName);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
if (hasRes) {
|
|||
|
if (customTypeArray[j]) {
|
|||
|
writer.writeln('public %s %s;', typeName, memberInfo.varName);
|
|||
|
}
|
|||
|
else {
|
|||
|
//寻找名称一样的组件的基础类型
|
|||
|
for (let k = 0; k < classCnt; k++) {
|
|||
|
var __classInfo = classes.get_Item(k);
|
|||
|
if (memberInfo.res.name == __classInfo.resName) {
|
|||
|
typeName = __classInfo.superClassName;
|
|||
|
baseTypeNameArray[j] = typeName;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
writer.writeln('public %s %s;', typeName, memberInfo.varName);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
writer.writeln('public %s %s;', typeName, memberInfo.varName);
|
|||
|
}
|
|||
|
memberTypeNameArray[j] = typeName;
|
|||
|
}
|
|||
|
}
|
|||
|
writer.writeln('public const string URL = "ui://%s%s";', handler.pkg.id, classInfo.resId);
|
|||
|
writer.writeln();
|
|||
|
writer.writeln('public %s(GObject go=null)', className);
|
|||
|
writer.startBlock();
|
|||
|
writer.writeln('if (go == null)');
|
|||
|
writer.startBlock();
|
|||
|
writer.writeln('throw new Exception($\"can\'t create view : {this.GetType()}\");');
|
|||
|
writer.endBlock();
|
|||
|
writer.writeln('self = (%s)go;', classInfo.superClassName);
|
|||
|
writer.writeln('var com = go.asCom;');
|
|||
|
writer.writeln();
|
|||
|
writer.writeln('if(com != null)');
|
|||
|
writer.startBlock();
|
|||
|
for (let j = 0; j < memberCnt; j++) {
|
|||
|
let memberInfo = members.get_Item(j);
|
|||
|
let typeName = baseTypeNameArray[j];
|
|||
|
let memberTypeName = memberTypeNameArray[j];
|
|||
|
let bIsCrassPkg = crossPackageFlagsArray[j];
|
|||
|
let bIsCustomComponent = customTypeArray[j];
|
|||
|
if (memberInfo.group == 0) {
|
|||
|
{
|
|||
|
//跨包必定导出,必定自定义
|
|||
|
if (bIsCrassPkg)
|
|||
|
if (bIsCustomComponent) {
|
|||
|
writer.writeln('%s = Create<%s>(this, com.GetChildAt(%s));', memberInfo.varName, memberTypeName, memberInfo.index);
|
|||
|
}
|
|||
|
else
|
|||
|
writer.writeln('%s = (%s)com.GetChildAt(%s);', memberInfo.varName, memberTypeName, memberInfo.index);
|
|||
|
else {
|
|||
|
if (bIsCustomComponent) {
|
|||
|
writer.writeln('%s = Create<%s>(this, com.GetChildAt(%s));', memberInfo.varName, memberTypeName, memberInfo.index);
|
|||
|
}
|
|||
|
else {
|
|||
|
writer.writeln('%s = (%s)com.GetChildAt(%s);', memberInfo.varName, memberTypeName, memberInfo.index);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else if (memberInfo.group == 1) {
|
|||
|
if (getMemberByName) {
|
|||
|
writer.writeln('%s = com.GetController("%s");', memberInfo.varName, memberInfo.name);
|
|||
|
}
|
|||
|
else
|
|||
|
writer.writeln('%s = com.GetControllerAt(%s);', memberInfo.varName, memberInfo.index);
|
|||
|
}
|
|||
|
else {
|
|||
|
if (getMemberByName) {
|
|||
|
writer.writeln('%s = com.GetTransition("%s");', memberInfo.varName, memberInfo.name);
|
|||
|
}
|
|||
|
else
|
|||
|
writer.writeln('%s = com.GetTransitionAt(%s);', memberInfo.varName, memberInfo.index);
|
|||
|
}
|
|||
|
}
|
|||
|
writer.endBlock();
|
|||
|
writer.endBlock();
|
|||
|
writer.writeln('public void Dispose()');
|
|||
|
writer.startBlock();
|
|||
|
writer.writeln('self = null;');
|
|||
|
for (let j = 0; j < memberCnt; j++) {
|
|||
|
let memberInfo = members.get_Item(j);
|
|||
|
let bIsCustomComponent = customTypeArray[j];
|
|||
|
if (memberInfo.group == 0) {
|
|||
|
if (!bIsCustomComponent) {
|
|||
|
writer.writeln('%s = null;', memberInfo.varName);
|
|||
|
}
|
|||
|
}
|
|||
|
else if (memberInfo.group == 1) {
|
|||
|
if (getMemberByName) {
|
|||
|
writer.writeln('%s = null;', memberInfo.varName);
|
|||
|
}
|
|||
|
else
|
|||
|
writer.writeln('%s = null;', memberInfo.varName);
|
|||
|
}
|
|||
|
else {
|
|||
|
if (getMemberByName)
|
|||
|
writer.writeln('%s = null;', memberInfo.varName);
|
|||
|
else {
|
|||
|
writer.writeln('%s = null;', memberInfo.varName);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
writer.endBlock();
|
|||
|
writer.endBlock(); //class
|
|||
|
writer.endBlock(); //namepsace
|
|||
|
writer.save(exportCodePath + '/' + className + '.cs');
|
|||
|
}
|
|||
|
writer.reset();
|
|||
|
writer.writeln('namespace %s', namespaceName);
|
|||
|
writer.startBlock();
|
|||
|
writer.writeln('public static partial class FUIPackage');
|
|||
|
writer.startBlock();
|
|||
|
writer.writeln('public const string %s = "%s";', codePkgName, codePkgName);
|
|||
|
for (let k = 0; k < classCnt; k++) {
|
|||
|
var classInfo = classes.get_Item(k);
|
|||
|
writer.writeln('public const string %s_%s = "ui://%s/%s";', codePkgName, classInfo.resName, codePkgName, classInfo.resName);
|
|||
|
}
|
|||
|
writer.endBlock(); //class
|
|||
|
writer.endBlock(); //namespace
|
|||
|
let binderPackageName = 'Package' + codePkgName;
|
|||
|
writer.save(exportCodePath + '/' + binderPackageName + '.cs');
|
|||
|
}
|
|||
|
exports.genCode = genCode;
|