【优化】优化type的属性解析,可以正确去掉多余括号

main
walon 2021-11-25 09:51:59 +08:00
parent 41fd0a908b
commit fa971c0e06
6 changed files with 16 additions and 11 deletions

View File

@ -339,7 +339,7 @@ namespace Luban.Job.Cfg.Defs
case "path": case "path":
case "range": case "range":
{ {
cf.Type = cf.Type + "&" + attrs[i]; cf.Type = cf.Type + "&(" + attrs[i] + ")";
break; break;
} }
case "group": case "group":
@ -665,16 +665,17 @@ namespace Luban.Job.Cfg.Defs
{ {
ValidAttrKeys(defineFile, e, _fieldOptionalAttrs, _fieldRequireAttrs); ValidAttrKeys(defineFile, e, _fieldOptionalAttrs, _fieldRequireAttrs);
string refStr = XmlUtil.GetOptionalAttribute(e, "ref");
string typeStr = XmlUtil.GetRequiredAttribute(e, "type"); string typeStr = XmlUtil.GetRequiredAttribute(e, "type");
string refStr = XmlUtil.GetOptionalAttribute(e, "ref");
if (!string.IsNullOrWhiteSpace(refStr)) if (!string.IsNullOrWhiteSpace(refStr))
{ {
typeStr = typeStr + "&ref=" + refStr; typeStr = typeStr + "&(ref=" + refStr + ")";
} }
string pathStr = XmlUtil.GetOptionalAttribute(e, "path"); string pathStr = XmlUtil.GetOptionalAttribute(e, "path");
if (!string.IsNullOrWhiteSpace(pathStr)) if (!string.IsNullOrWhiteSpace(pathStr))
{ {
typeStr = typeStr + "&path=" + pathStr; typeStr = typeStr + "&(path=" + pathStr + ")";
} }
return CreateField(defineFile, XmlUtil.GetRequiredAttribute(e, "name"), return CreateField(defineFile, XmlUtil.GetRequiredAttribute(e, "name"),

View File

@ -2,6 +2,7 @@ using Luban.Job.Cfg.Datas;
using Luban.Job.Cfg.Defs; using Luban.Job.Cfg.Defs;
using Luban.Job.Common.Defs; using Luban.Job.Common.Defs;
using Luban.Job.Common.Types; using Luban.Job.Common.Types;
using Luban.Job.Common.Utils;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -163,7 +164,7 @@ namespace Luban.Job.Cfg.Validators
public PathValidator(TType type, string pathPattern) public PathValidator(TType type, string pathPattern)
{ {
Type = type; Type = type;
this.RawPattern = pathPattern; this.RawPattern = DefUtil.TrimBracePairs(pathPattern);
} }
public void Validate(ValidatorContext ctx, TType type, DType data) public void Validate(ValidatorContext ctx, TType type, DType data)

View File

@ -1,8 +1,10 @@
using Luban.Job.Cfg.Datas; using Luban.Job.Cfg.Datas;
using Luban.Job.Cfg.DataVisitors; using Luban.Job.Cfg.DataVisitors;
using Luban.Job.Cfg.Defs; using Luban.Job.Cfg.Defs;
using Luban.Job.Cfg.Utils;
using Luban.Job.Common.Defs; using Luban.Job.Common.Defs;
using Luban.Job.Common.Types; using Luban.Job.Common.Types;
using Luban.Job.Common.Utils;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -31,7 +33,7 @@ namespace Luban.Job.Cfg.Validators
public RefValidator(TType type, string tablesStr) public RefValidator(TType type, string tablesStr)
{ {
Type = type; Type = type;
this.Tables = new List<string>(tablesStr.Split(',')); this.Tables = new List<string>(DefUtil.TrimBracePairs(tablesStr).Split(','));
} }
public void Validate(ValidatorContext ctx, TType type, DType key) public void Validate(ValidatorContext ctx, TType type, DType key)

View File

@ -2,6 +2,7 @@
using Luban.Job.Cfg.Datas; using Luban.Job.Cfg.Datas;
using Luban.Job.Common.Defs; using Luban.Job.Common.Defs;
using Luban.Job.Common.Types; using Luban.Job.Common.Types;
using Luban.Job.Common.Utils;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -23,7 +24,7 @@ namespace Luban.Job.Cfg.Validators
{ {
_type = ttype; _type = ttype;
_datas = new HashSet<DType>(); _datas = new HashSet<DType>();
_valueSetStr = param; _valueSetStr = DefUtil.TrimBracePairs(param);
} }
public void Compile(DefFieldBase def) public void Compile(DefFieldBase def)

View File

@ -143,7 +143,7 @@ namespace Luban.Job.Common.Defs
public TType CreateType(string module, string type) public TType CreateType(string module, string type)
{ {
int sepIndex = DefUtil.IndexOfIncludeBrace(type, ','); int sepIndex = DefUtil.IndexOfElementTypeSep(type);
if (sepIndex > 0) if (sepIndex > 0)
{ {
string containerTypeAndTags = DefUtil.TrimBracePairs(type.Substring(0, sepIndex)); string containerTypeAndTags = DefUtil.TrimBracePairs(type.Substring(0, sepIndex));
@ -232,7 +232,7 @@ namespace Luban.Job.Common.Defs
protected TMap CreateMapType(string module, Dictionary<string, string> tags, string keyValueType, bool isTreeMap) protected TMap CreateMapType(string module, Dictionary<string, string> tags, string keyValueType, bool isTreeMap)
{ {
int typeSepIndex = DefUtil.IndexOfIncludeBrace(keyValueType, ','); int typeSepIndex = DefUtil.IndexOfElementTypeSep(keyValueType);
if (typeSepIndex <= 0 || typeSepIndex >= keyValueType.Length - 1) if (typeSepIndex <= 0 || typeSepIndex >= keyValueType.Length - 1)
{ {
throw new ArgumentException($"invalid map element type:'{keyValueType}'"); throw new ArgumentException($"invalid map element type:'{keyValueType}'");

View File

@ -39,7 +39,7 @@ namespace Luban.Job.Common.Utils
return am; return am;
} }
public static int IndexOfIncludeBrace(string s, char sep) public static int IndexOfElementTypeSep(string s)
{ {
int braceDepth = 0; int braceDepth = 0;
for (int i = 0; i < s.Length; i++) for (int i = 0; i < s.Length; i++)
@ -54,7 +54,7 @@ namespace Luban.Job.Common.Utils
--braceDepth; --braceDepth;
} }
if (braceDepth == 0 && (c == sep)) if (braceDepth == 0 && (c == ',' || c == ';'))
{ {
return i; return i;
} }