void ResolveFeatures(XmlNode root) { string number = root.Attributes["number"].Value; string[] tokens = number.Split('.'); int fMajor = int.Parse(tokens[0]); int fMinor = int.Parse(tokens[1]); if ((fMajor < major) || (fMajor == major && fMinor < minor)) { return; } foreach (XmlNode node in root.ChildNodes) { if (node.Name == "require") { foreach (XmlNode f in node.ChildNodes) { if (f.Name == "command") { IncludedCommands.Add(f.Attributes["name"].Value); } } } } }
void ResolveExtensions(XmlNode root) { foreach (XmlNode extension in root.ChildNodes) { if (extension is XmlComment) { continue; } string eName = extension.Attributes["name"].Value; foreach (XmlNode r in extension.ChildNodes) { foreach (XmlNode node in r.ChildNodes) { if (r.Name == "require") { if (node.Name == "command") { if (ExtensionRequested(eName)) { IncludedCommands.Add(node.Attributes["name"].Value); ExtensionCommands.Add(node.Attributes["name"].Value); } } else if (node.Name == "type") { string tName = node.Attributes["name"].Value; if (ExtensionRequested(eName)) { IncludedTypes.Add(tName); } ExtensionTypes.Add(tName); } else if (node.Name == "enum") { if (ExtensionRequested(eName)) { var extends = node.Attributes["extends"]; var offsetNode = node.Attributes["offset"]; var extensionNumber = node.Attributes["extnumber"]; if (node.Attributes["alias"] != null) { continue; } if (extends != null && offsetNode != null) { var name = extends.Value; int exNumber; if (extensionNumber != null) { exNumber = int.Parse(extensionNumber.Value); } else { exNumber = 2; } var offset = int.Parse(offsetNode.Value); var sign = 1; if (node.Attributes["dir"] != null) { sign = -1; } EnumMap[name].Extend(node.Attributes["name"].Value, exNumber, offset, sign); } IncludedTypes.Add(node.Attributes["name"].Value); } } } } } } }