internal Element(GumboElementNode node, Node parent, GumboFactory factory) : base(node, parent) { _children = factory.CreateLazy(() => ImmutableArray.CreateRange(node.GetChildren().OrderBy(x => x.index_within_parent).Select(x => factory.CreateNode(x, this)))); _attributes = factory.CreateLazy(() => ImmutableArray.CreateRange(node.GetAttributes().Select(x => factory.CreateAttribute(x, this)))); _value = factory.CreateLazy(() => string.Concat(Children.Select(x => x is Element ? ((Element)x).Value : ((Text)x).Value))); StartPosition = node.element.start_pos; EndPosition = node.element.end_pos; Tag = node.element.tag; TagNamespace = node.element.tag_namespace; OriginalTag = NativeUtf8.StringFromNativeUtf8(node.element.original_tag.data, (int)node.element.original_tag.length); OriginalTagName = GetTagNameFromOriginalTag(node.element); OriginalEndTag = NativeUtf8.StringFromNativeUtf8(node.element.original_end_tag.data, (int)node.element.original_end_tag.length); NormalizedTagName = NativeUtf8.StringFromNativeUtf8(NativeMethods.gumbo_normalized_tagname(node.element.tag)); }
public static IEnumerable <GumboAttribute> GetAttributes(this GumboElementNode node) => MarshalToPtrArray(node.element.attributes).Select(Marshal.PtrToStructure <GumboAttribute>);
public static IEnumerable <GumboNode> GetChildren(this GumboElementNode node) => MarshalToPtrArray(node.element.children).Select(MarshalToSpecificNode);