public void _Init() { if (_isInitializated) { return; } // var strings = File.ReadAllLines(_owner.FileName); bool isInsideMethod = false; byte tabs = 0; var variables = new Dictionary <Glance.FieldsAccessType, List <string> >(); List <string> constructors = new List <string>(); string constructorBody = ""; string currentMethodSignature = null; Region currentRegion = Region.Undefined; Glance.FieldsAccessType currentAcessType = Glance.FieldsAccessType.Public; foreach (var i in strings) { var str = i.Trim(); if (str == "") { continue; } if (str.Length > 2) { if (str.Substring(0, 2) == "//") { continue; } } if (str.Contains(Glance.NameSetting.ScriptVariablesRegionName)) { currentRegion = Region.Variables; currentAcessType = Glance.FieldsAccessType.Public; continue; } if (str.Contains(Glance.NameSetting.ScriptMethodsRegionName)) { currentRegion = Region.Methods; currentAcessType = Glance.FieldsAccessType.Public; continue; } if (str.Contains(Glance.NameSetting.ScriptConstructorsRegionName)) { currentRegion = Region.Constructor; continue; } if (str.Contains(Glance.NameSetting.ScriptConstructorBodyRegionName)) { currentRegion = Region.ConstructorBody; continue; } if (currentRegion == Region.Variables) { if (str.Contains("public:")) { currentAcessType = Glance.FieldsAccessType.Public; continue; } if (str.Contains("private:")) { currentAcessType = Glance.FieldsAccessType.Private; continue; } var tmp = new List <string>(); tmp.Add(str.Replace(";", "")); variables.gAddOrMerge(currentAcessType, tmp); } if (currentRegion == Region.Constructor) { constructors.AddRange(str.Split(',').gForEach(x => x.Trim())); //add Trimmed array } if (currentRegion == Region.ConstructorBody) { constructorBody += str; } if (currentRegion == Region.Methods) { if (!isInsideMethod) { //if we are not inside of method, then we are at signature of this method if (Glance.getLastChar(str) != '{') { throw new Exception("'{' not at the end of line with method signature, signature is: " + str); } if (str.Contains("public:")) { currentAcessType = Glance.FieldsAccessType.Public; continue; } if (str.Contains("private:")) { currentAcessType = Glance.FieldsAccessType.Private; continue; } currentMethodSignature = str.Substring(0, str.Length - 1); //cut '{' ++tabs; isInsideMethod = true; if (MethodsImplementations.ContainsKey(currentMethodSignature)) { MethodsImplementations[currentMethodSignature] += ""; } else { MethodsImplementations.Add(currentMethodSignature, ""); } continue; } if (isInsideMethod) { if (str.Contains("{")) { ++tabs; } if (str.Contains("}")) { --tabs; } if (tabs == 0) { isInsideMethod = false; continue; } if (MethodsImplementations.ContainsKey(currentMethodSignature)) { MethodsImplementations[currentMethodSignature] += str + '\n'; } else { MethodsImplementations.Add(currentMethodSignature, str + '\n'); } } } } //foreach Constructors = constructors; ConstructorBody = constructorBody; Variables = variables; OnUpdate = MethodsImplementations[Glance.NameSetting.ScriptOnUpdateSignature]; OnStart = MethodsImplementations[Glance.NameSetting.ScriptOnStartSignature]; MethodsImplementations.Remove(Glance.NameSetting.ScriptOnStartSignature); MethodsImplementations.Remove(Glance.NameSetting.ScriptOnUpdateSignature); if (MethodsImplementations.ContainsKey("")) { MethodsImplementations.Remove(""); } MethodsDeclarations.Add(Glance.FieldsAccessType.Public, MethodsImplementations.Keys.ToList()); _isInitializated = true; } //_Init()
internal static List <string> gGetByKeyOrDefault(this Dictionary <Glance.FieldsAccessType, List <string> > dic, Glance.FieldsAccessType t) { if (dic.ContainsKey(t)) { return(dic[t]); } else { return(new List <string>()); } }