private static IEnumerable <XNode> ToXNodes(IEnumerable <TableNode> nodes) { foreach (var n in nodes.Where(n => n != null)) { var kv = n as KeyValue; if (kv != null) { var tomlType = new XAttribute("toml", kv.Value.Type.ToString()); var jsonType = new XAttribute("type", XUtils.GetJsonTypeString(kv.Value.Type)); var content = ConvertContent(kv.Value); yield return(XUtils.IsValidName(kv.Key) ? new XElement(kv.Key, jsonType, tomlType, content) : new XElement(XUtils.NamespaceA + "item", XUtils.PrefixA, new XAttribute("item", kv.Key), jsonType, tomlType, content )); if (kv.Comment != null) { yield return(new XComment(kv.Comment.Text)); } } else { yield return(new XComment(((Comment)n).Text)); } } }
private static XAttribute[] CreateTypeAttr(TomlItemType nodeType) { return(new[] { new XAttribute("type", XUtils.GetJsonTypeString(nodeType)), new XAttribute("toml", nodeType.ToString()) }); }
private static IEnumerable <object> ConvertContent(TomlValue value) { switch (value.Type) { case TomlItemType.Array: foreach (var a in (IEnumerable <ArrayItem>)value.Value) { foreach (var c in a.Before) { yield return(new XComment(c.Text)); } if (a.Value != null) { yield return(new XElement("item", new XAttribute("type", XUtils.GetJsonTypeString(a.Value.Type)), new XAttribute("toml", a.Value.Type.ToString()), ConvertContent(a.Value) )); } foreach (var c in a.After) { yield return(new XComment(c.Text)); } } break; case TomlItemType.InlineTable: foreach (var n in ToXNodes((IEnumerable <KeyValue>)value.Value)) { yield return(n); } break; default: yield return(value.Value); break; } }