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));
                }
            }
        }
Beispiel #2
0
 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;
            }
        }