public static UIGroup FromReduction(GOLDEngine.Reduction r, Dictionary<Token, object> dataMap) { UIGroup result = new UIGroup(); // <Object> ::= BeginLiteral <Content> EndLiteral var content = (List<UINode>)dataMap[r[1]]; var sharedProps = content.FirstOrDefault(x => x.Name == "SetSharedProperties"); result.SharedProperties = sharedProps; result.Children = content.Where(x => x != sharedProps).ToList(); return result; }
private object CreateNewObject(GOLDEngine.Reduction r) { object result = r.ToText(); for (int i = 0; i < r.Count; i++) { if (!DataMap.ContainsKey(r[i])) { DataMap[r[i]] = r[i].ToText(); } } switch ((ProductionIndex)r.Production.TableIndex()) { case ProductionIndex.Objects: var newResult = new List<UINode>(); newResult.Add((UINode)DataMap[r[0]]); newResult.AddRange((List<UINode>)DataMap[r[1]]); result = newResult; program = result; // <Objects> ::= <Object> <Objects> break; case ProductionIndex.Objects2: // <Objects> ::= <Object> var newResult2 = new List<UINode>(); newResult2.Add((UINode)DataMap[r[0]]); result = newResult2; program = result; break; case ProductionIndex.Object_Beginliteral_Endliteral: // <Object> ::= BeginLiteral <Content> EndLiteral result = UIGroup.FromReduction(r, DataMap); break; case ProductionIndex.Object: // <Object> ::= <Start Tag> result = DataMap[r[0]]; break; case ProductionIndex.Object2: // <Object> ::= <Unary Tag> break; case ProductionIndex.Starttag_Lt_Id_Gt: // <Start Tag> ::= '<' ID <OptionalID> <Attributes> '>' var node = new UINode(); node.Name = (string)DataMap[r[1]]; node.ID = (string)DataMap[r[2]]; var atts = (List<KeyValuePair<string, string>>)DataMap[r[3]]; foreach (var att in atts) { node[att.Key] = att.Value; } result = node; break; case ProductionIndex.Endtag_Ltdiv_Id_Gt: // <End Tag> ::= '</' ID '>' break; case ProductionIndex.Unarytag_Lt_Id_Divgt: // <Unary Tag> ::= '<' ID <OptionalID> <Attributes> '/>' break; case ProductionIndex.Optionalid_Stringliteral: // <OptionalID> ::= StringLiteral result = GetStringLiteral((string)DataMap[r[0]]); break; case ProductionIndex.Optionalid: // <OptionalID> ::= result = null; break; case ProductionIndex.Content: // <Content> ::= <Objects> var newResult3 = new List<UINode>(); newResult3.AddRange((List<UINode>)DataMap[r[0]]); result = newResult3; break; case ProductionIndex.Content2: // <Content> ::= <Text> var newResult4 = new List<UINode>(); newResult4.Add((UINode)DataMap[r[0]]); result = newResult4; break; case ProductionIndex.Attributes: // <Attributes> ::= <Attribute> <Attributes> var attributeList = new List<KeyValuePair<string, string>>(); attributeList.Add((KeyValuePair<string, string>)DataMap[r[0]]); if (r.Count > 1) { attributeList.AddRange((List<KeyValuePair<string, string>>)DataMap[r[1]]); } result = attributeList; break; case ProductionIndex.Attributes2: // <Attributes> ::= result = new List<KeyValuePair<string, string>>(); break; case ProductionIndex.Attribute_Id_Eq_Stringliteral: // <Attribute> ::= ID '=' StringLiteral result = new KeyValuePair<string, string>((string)DataMap[r[0]], GetStringLiteral((string)DataMap[r[2]])); break; case ProductionIndex.Attribute_Id_Eq_Id: // <Attribute> ::= ID '=' ID result = new KeyValuePair<string, string>((string)DataMap[r[0]], (string)DataMap[r[2]]); break; case ProductionIndex.Text: // <Text> ::= <Text> <Word> break; case ProductionIndex.Text2: // <Text> ::= <Word> break; case ProductionIndex.Word_Id: // <Word> ::= ID break; case ProductionIndex.Word_Eq: // <Word> ::= '=' break; case ProductionIndex.Word_Charname: // <Word> ::= CharName break; case ProductionIndex.Word_Charnumber: // <Word> ::= CharNumber break; } //switch DataMap[r] = result; return result; }
public static UISharedProperties FromReduction(GOLDEngine.Reduction r) { UISharedProperties result = new UISharedProperties(); return result; }