/// <summary>TSCコードからTSCObjectを作成する</summary> /// <param name="tscCode">TSCコード</param> /// <returns>TSCObject</returns> private static TSCObject makeTSCObject(string tscCode) { if (!RG1.IsMatch(tscCode)) return NULL_OBJECT; TSCObject tscObj = new TSCObject("DEFAULT"); Match match = RG2.Match(tscCode); if (match.Success) { tscObj.SetPrefix(match.Value); tscCode = tscCode.Remove(0, match.Length); } match = RG3.Match(tscCode); if (match.Success) { tscObj.CoreName = match.Value; tscCode = tscCode.Remove(0, match.Length); } match = RG4.Match(tscCode); if (match.Success) { tscObj.SetArrayString(match.Value.Substring(1, match.Value.Length - 2)); tscCode = tscCode.Remove(0, match.Length); } match = RG5.Match(tscCode); if (match.Success) { tscObj.SetSuffix(match.Value); } return tscObj; }
/// <summary>TSCコードからTSCObjectを作成する</summary> /// <param name="tscCode">TSCコード</param> /// <param name="tscObject">TSCObject</param> /// <returns>作成成功の真偽</returns> public static bool TryMakeTSCObjectFromTSCCode(string tscCode, out TSCObject tscObject) { tscObject = NULL_OBJECT; Regex reg = new Regex("[A-Z]+"); //階層を切断 string[] objs = tscCode.Split('_'); for (int i = 1; i < objs.Length; i++) { if (objs[i] == "") break; //大文字を含まない場合は添字 while ((!reg.IsMatch(objs[i])) && (objs[i] != "")) { objs[i - 1] += "_" + objs[i]; for (int j = i; j < objs.Length - 1; j++) { objs[j] = objs[j + 1]; } objs[objs.Length - 1] = ""; } } tscObject = makeTSCObject(objs[0]); if (tscObject == NULL_OBJECT) return false; TSCObject parent = tscObject; for (int i = 1; i < objs.Length; i++) { if (objs[i] == "") break; TSCObject child = makeTSCObject(objs[i]); if (tscObject == NULL_OBJECT) break; parent.Child = child; parent = child; } return true; }