private List <NetworkClassField> ParseDeserializeBloc(String bloc, out bool useBool) { useBool = false; List <NetworkClassField> Fields = new List <NetworkClassField>(); String[] lines = bloc.Split('\n'); for (int i = 0; i < lines.Length; i++) { String line = lines[i]; if (PrimitiveWriteCall.IsMatch(line)) { Match m = PrimitiveWriteCall.Match(line); Fields.Add(new NetworkClassField(m.Groups[3].Value, m.Groups[2].Value)); //Console.WriteLine(m.Groups[3].Value + " : " + m.Groups[2].Value); } else if (SerializeObject.IsMatch(line)) { Match m = SerializeObject.Match(line); Fields.Add(new NetworkClassField(m.Groups[1].Value, m.Groups[2].Value)); } else if (ArraySizeWriteCall.IsMatch(line)) { Match m = ArraySizeWriteCall.Match(line); NetworkClassField field = new NetworkClassField(m.Groups[3].Value); field.ArrayMethode = m.Groups[2].Value; field.IsGenericArray = false; field.IsArray = true; i += 2; int open = 0; int close = 0; for (; i < lines.Length; i++) { line = lines[i]; if (line.Trim() == "{") { open++; } if (line.Trim() == "}") { close++; } if (ArraySerializeIdCall.IsMatch(line)) { field.IsGenericArray = true; } else if (ArraySerializeCall.IsMatch(line)) { Match m2 = ArraySerializeCall.Match(line); field.Methode = m2.Groups[1].Value; } else if (ArrySerializePrimitiveCall.IsMatch(line)) { Match m2 = ArrySerializePrimitiveCall.Match(line); field.Methode = m2.Groups[2].Value; } if (close == open) { break; } } //Console.WriteLine(field.Name + "[" + field.Methode + "] " + (field.IsGenericArray ? "Generic" : "") + " size methode " + field.ArrayMethode); Fields.Add(field); } else if (BooleanByteCall.IsMatch(line)) { Match m2 = BooleanByteCall.Match(line); Fields.Add(new NetworkClassField(m2.Groups[2].Value, int.Parse(m2.Groups[1].Value))); useBool = true; //Console.WriteLine(m2.Groups[2].Value + " : bool -> " + m2.Groups[1].Value); } } return(Fields); }
public FastConvert(String content) { Parsed = new NetworkClass(); String[] lines = content.Split('\n'); int open = 0; int close = 0; bool readingDeserialize = false; String bloc = ""; foreach (String line in lines) { if (readingDeserialize) { if (line.Trim() == "{") { open++; } if (line.Trim() == "}") { close++; } bloc += line + "\n"; if (open == close) { break; } } else if (SerializeFncReg.IsMatch(line)) { readingDeserialize = true; } else if (ClassDeclaration.IsMatch(line)) { Match m = ClassDeclaration.Match(line); Parsed.Name = m.Groups[1].Value; Parsed.Parent = m.Groups[2].Value; } else if (ClassDeclarationSimple.IsMatch(line)) { Match m = ClassDeclarationSimple.Match(line); Parsed.Name = m.Groups[1].Value; } else if (ProtocolId.IsMatch(line)) { Match m = ProtocolId.Match(line); Parsed.Id = int.Parse(m.Groups[1].Value); } } bool useBw = false; Parsed.Fields = ParseDeserializeBloc(bloc, out useBw); Parsed.UseByteWrapper = useBw; NetworkClassField last = null; foreach (NetworkClassField field in Parsed.Fields) { if (field.IsBoolean) { field.IsLast = false; last = field; } field.ConvertNames(); } if (last != null) { last.IsLast = true; } }