private static int ReadToken (String[] lines, int index, out KspToken token) { if ((index + 1) >= lines.Length) { token = null; return index; } var name = lines [index].Trim (); var isGlobalToken = name.Contains ("="); var attributes = new List<KeyValuePair<String, String>> (); var tokens = new List<KspToken> (); if (!isGlobalToken) { index++; if (lines [index++] != "{") { throw new FormatException (); } } index = ReadAttributes (lines, index, attributes.Add); index = ReadTokens (lines, index, tokens.Add); if (!isGlobalToken) { if (index >= lines.Length || lines [index++] != "}") { throw new FormatException (); } token = new KspToken (name, attributes, tokens); } else { token = KspTokenGlobalExtension.CreateGlobalToken (attributes, tokens); } return index; }
private static KspObject ReadObjectTree(KspToken token, Action <KspObject, KspToken> addTokenMapping) { KspObject obj; // Treat global tokens as craft object -> needed for .craft file support var type = token.IsGlobalToken() ? KspCraftObject.TypeId : token.Name; switch (type) { case KspCraftObject.TypeId: obj = new KspCraftObject(token.IsGlobalToken()); break; case KspPartObject.TypeId: obj = new KspPartObject(token.IsGlobalToken()); break; default: obj = new KspObject(token.Name, token.IsGlobalToken()); break; } foreach (var t in token.Tokens) { obj.AddChild(ReadObjectTree(t, addTokenMapping)); } addTokenMapping(obj, token); return(obj); }
private static void WriteToken(KspToken token, StringBuilder sb, int lvl) { if (String.IsNullOrEmpty(token.Name)) { return; } if (!token.IsGlobalToken()) { WriteLine(token.Name, sb, lvl); WriteLine("{", sb, lvl); } var contentLevel = (token.IsGlobalToken() ? lvl : lvl + 1); foreach (var a in token.Attributes) { WriteAttribute(a, sb, contentLevel); } foreach (var t in token.Tokens) { WriteToken(t, sb, contentLevel); } if (!token.IsGlobalToken()) { WriteLine("}", sb, lvl); } }
private static KspObject ReadObjectTree (KspToken token, Action<KspObject, KspToken> addTokenMapping) { KspObject obj; // Treat global tokens as craft object -> needed for .craft file support var type = token.IsGlobalToken () ? KspCraftObject.TypeId : token.Name; switch (type) { case KspCraftObject.TypeId: obj = new KspCraftObject (token.IsGlobalToken ()); break; case KspPartObject.TypeId: obj = new KspPartObject (token.IsGlobalToken ()); break; default: obj = new KspObject (token.Name, token.IsGlobalToken ()); break; } foreach (var t in token.Tokens) { obj.AddChild (ReadObjectTree (t, addTokenMapping)); } addTokenMapping (obj, token); return obj; }
private static void WriteToken (KspToken token, StringBuilder sb, int lvl) { if (String.IsNullOrEmpty (token.Name)) { return; } if (!token.IsGlobalToken ()) { WriteLine (token.Name, sb, lvl); WriteLine ("{", sb, lvl); } var contentLevel = (token.IsGlobalToken () ? lvl : lvl + 1); foreach (var a in token.Attributes) { WriteAttribute (a, sb, contentLevel); } foreach (var t in token.Tokens) { WriteToken (t, sb, contentLevel); } if (!token.IsGlobalToken ()) { WriteLine ("}", sb, lvl); } }
public static KspObject ReadObject (KspToken token) { var tokenMapping = new Dictionary<KspObject, KspToken> (); var objectTree = ReadObjectTree (token, tokenMapping.Add); var allObjects = FlattenObjectTree (objectTree).ToArray (); foreach (var obj in allObjects) { ReadStringProperties (obj, tokenMapping [obj].Attributes.ToList ()); } foreach (var obj in allObjects) { ReadPartLinkProperties (obj, tokenMapping [obj].Attributes.ToList ()); } return objectTree; }
public static KspObject ReadObject(KspToken token) { var tokenMapping = new Dictionary <KspObject, KspToken> (); var objectTree = ReadObjectTree(token, tokenMapping.Add); var allObjects = FlattenObjectTree(objectTree).ToArray(); foreach (var obj in allObjects) { ReadStringProperties(obj, tokenMapping [obj].Attributes.ToList()); } foreach (var obj in allObjects) { ReadPartLinkProperties(obj, tokenMapping [obj].Attributes.ToList()); } return(objectTree); }
private static int ReadToken(String[] lines, int index, out KspToken token) { if ((index + 1) >= lines.Length) { token = null; return(index); } var name = lines [index].Trim(); var isGlobalToken = name.Contains("="); var attributes = new List <KeyValuePair <String, String> > (); var tokens = new List <KspToken> (); if (!isGlobalToken) { index++; if (lines [index++] != "{") { throw new FormatException(); } } index = ReadAttributes(lines, index, attributes.Add); index = ReadTokens(lines, index, tokens.Add); if (!isGlobalToken) { if (index >= lines.Length || lines [index++] != "}") { throw new FormatException(); } token = new KspToken(name, attributes, tokens); } else { token = KspTokenGlobalExtension.CreateGlobalToken(attributes, tokens); } return(index); }
public static StringBuilder WriteToken(KspToken token, StringBuilder sb) { WriteToken(token, sb, 0); return(sb); }
public static bool IsGlobalToken(this KspToken token) { return(Object.Equals(token.Name, GlobalTokenName)); }
public static StringBuilder WriteToken (KspToken token, StringBuilder sb) { WriteToken (token, sb, 0); return sb; }