Ejemplo n.º 1
0
        internal AttributeWrapper(GumboAttribute attribute, ElementWrapper parent, int index,
                                  Action <string, ElementWrapper> addElementWithId)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            if (addElementWithId == null)
            {
                throw new ArgumentNullException("addElementWithId");
            }

            Parent        = parent;
            Index         = index;
            Name          = NativeUtf8Helper.StringFromNativeUtf8(attribute.name);
            Value         = NativeUtf8Helper.StringFromNativeUtf8(attribute.value);
            OriginalName  = NativeUtf8Helper.StringFromNativeUtf8(attribute.original_name.data, (int)attribute.original_name.length);
            OriginalValue = NativeUtf8Helper.StringFromNativeUtf8(attribute.original_value.data, (int)attribute.original_value.length);
            NameStart     = attribute.name_start;
            NameEnd       = attribute.name_end;
            ValueStart    = attribute.value_start;
            ValueEnd      = attribute.value_end;
            Namespace     = attribute.attr_namespace;

            if (String.Equals(this.Name, "id", StringComparison.OrdinalIgnoreCase))
            {
                addElementWithId(this.Value, parent);
            }
        }
Ejemplo n.º 2
0
        internal ElementWrapper(GumboElementNode node, NodeWrapper parent, WrapperFactory factory)
            : base(node, parent)
        {
            _Children = factory.CreateDisposalAwareLazy(() =>
                                                        ImmutableArray.CreateRange(node.GetChildren().OrderBy(x => x.index_within_parent).Select(x => factory.CreateNodeWrapper(x, this))));

            _Attributes = factory.CreateDisposalAwareLazy(() =>
                                                          ImmutableArray.CreateRange(node.GetAttributes().Select(x => factory.CreateAttributeWrapper(x, this))));

            _Value = factory.CreateDisposalAwareLazy(() => string.Concat(Children.Select(x => x is ElementWrapper
                    ? ((ElementWrapper)x).Value
                    : ((TextWrapper)x).Value)));

            StartPosition = node.element.start_pos;
            EndPosition   = node.element.end_pos;

            Tag          = node.element.tag;
            TagNamespace = node.element.tag_namespace;
            OriginalTag  = NativeUtf8Helper.StringFromNativeUtf8(
                node.element.original_tag.data, (int)node.element.original_tag.length);
            OriginalTagName = GetTagNameFromOriginalTag(node.element);
            OriginalEndTag  = NativeUtf8Helper.StringFromNativeUtf8(
                node.element.original_end_tag.data, (int)node.element.original_end_tag.length);
            NormalizedTagName = NativeUtf8Helper.StringFromNativeUtf8(
                NativeMethods.gumbo_normalized_tagname(node.element.tag));
        }
Ejemplo n.º 3
0
        internal DocumentWrapper(GumboDocumentNode node, WrapperFactory factory)
            : base(node, null)
        {
            _Children = factory.CreateDisposalAwareLazy(() =>
                                                        ImmutableArray.CreateRange(node.GetChildren().OrderBy(x => x.index_within_parent).Select(x => factory.CreateNodeWrapper(x, this))));

            HasDocType        = node.document.has_doctype;
            Name              = NativeUtf8Helper.StringFromNativeUtf8(node.document.name);
            PublicIdentifier  = NativeUtf8Helper.StringFromNativeUtf8(node.document.public_identifier);
            SystemIdentifier  = NativeUtf8Helper.StringFromNativeUtf8(node.document.system_identifier);
            DocTypeQuirksMode = node.document.doc_type_quirks_mode;
        }
Ejemplo n.º 4
0
        internal DocumentWrapper(GumboDocumentNode node, DisposalAwareLazyFactory lazyFactory,
                                 Action <string, ElementWrapper> addElementWithId)
            : base(node, null)
        {
            _Children = lazyFactory.Create <IEnumerable <ElementWrapper> >(() =>
            {
                return(node.GetChildren().Select(x => new ElementWrapper((GumboElementNode)x, this,
                                                                         lazyFactory, addElementWithId)).ToList().AsReadOnly());
            });

            HasDocType        = node.document.has_doctype;
            Name              = NativeUtf8Helper.StringFromNativeUtf8(node.document.name);
            PublicIdentifier  = NativeUtf8Helper.StringFromNativeUtf8(node.document.public_identifier);
            SystemIdentifier  = NativeUtf8Helper.StringFromNativeUtf8(node.document.system_identifier);
            DocTypeQuirksMode = node.document.doc_type_quirks_mode;
        }
Ejemplo n.º 5
0
        internal AttributeWrapper(GumboAttribute attribute, ElementWrapper parent)
        {
            if (parent == null)
            {
                throw new ArgumentNullException(nameof(parent));
            }

            Parent        = parent;
            Name          = NativeUtf8Helper.StringFromNativeUtf8(attribute.name);
            Value         = NativeUtf8Helper.StringFromNativeUtf8(attribute.value);
            OriginalName  = NativeUtf8Helper.StringFromNativeUtf8(attribute.original_name.data, (int)attribute.original_name.length);
            OriginalValue = NativeUtf8Helper.StringFromNativeUtf8(attribute.original_value.data, (int)attribute.original_value.length);
            NameStart     = attribute.name_start;
            NameEnd       = attribute.name_end;
            ValueStart    = attribute.value_start;
            ValueEnd      = attribute.value_end;
            Namespace     = attribute.attr_namespace;
        }
Ejemplo n.º 6
0
        private static XNode CreateXNode(GumboNode node)
        {
            switch (node.type)
            {
            case GumboNodeType.GUMBO_NODE_DOCUMENT:
                var docNode = (GumboDocumentNode)node;
                return(new XDocument(docNode.GetChildren().Select(x => CreateXNode(x))));

            case GumboNodeType.GUMBO_NODE_ELEMENT:
                var    elementNode = (GumboElementNode)node;
                string elementName = GetName(elementNode.element.tag);
                var    attributes  = elementNode.GetAttributes().Select(x => new XAttribute(
                                                                            NativeUtf8Helper.StringFromNativeUtf8(x.name),
                                                                            NativeUtf8Helper.StringFromNativeUtf8(x.value)));
                var children = elementNode.GetChildren().Select(x => CreateXNode(x));
                return(new XElement(elementName, attributes, children));

            case GumboNodeType.GUMBO_NODE_TEXT:
                var textNode = (GumboTextNode)node;
                return(new XText(NativeUtf8Helper.StringFromNativeUtf8(textNode.text.text)));

            case GumboNodeType.GUMBO_NODE_CDATA:
                var cDataNode = (GumboTextNode)node;
                return(new XCData(NativeUtf8Helper.StringFromNativeUtf8(cDataNode.text.text)));

            case GumboNodeType.GUMBO_NODE_COMMENT:
                var commentNode = (GumboTextNode)node;
                return(new XComment(NativeUtf8Helper.StringFromNativeUtf8(commentNode.text.text)));

            case GumboNodeType.GUMBO_NODE_WHITESPACE:
                var spaceNode = (GumboTextNode)node;
                return(new XText(NativeUtf8Helper.StringFromNativeUtf8(spaceNode.text.text)));

            default:
                throw new NotSupportedException(String.Format("Unknown node type '{0}'", (int)node.type));
            }
        }
Ejemplo n.º 7
0
        internal ElementWrapper(GumboElementNode node, NodeWrapper parent, DisposalAwareLazyFactory lazyFactory,
                                Action <string, ElementWrapper> addElementWithId)
            : base(node, parent)
        {
            _Children = lazyFactory.Create <IEnumerable <NodeWrapper> >(() =>
            {
                return(node.GetChildren().Select(x => x is GumboElementNode
                ? (NodeWrapper) new ElementWrapper((GumboElementNode)x, this, lazyFactory, addElementWithId)
                : (NodeWrapper) new TextWrapper((GumboTextNode)x, this)).ToList().AsReadOnly());
            });

            _Attributes = lazyFactory.Create <IEnumerable <AttributeWrapper> >(() =>
            {
                return(node.GetAttributes().Select((x, i) =>
                                                   new AttributeWrapper(x, this, i, addElementWithId)).ToList());
            });

            _Value = lazyFactory.Create <string>(() =>
            {
                return(String.Concat(this.Children.Select(x => x is ElementWrapper
                    ? ((ElementWrapper)x).Value
                    : ((TextWrapper)x).Text)));
            });

            StartPosition = node.element.start_pos;
            EndPosition   = node.element.end_pos;

            Tag          = node.element.tag;
            TagNamespace = node.element.tag_namespace;
            OriginalTag  = NativeUtf8Helper.StringFromNativeUtf8(
                node.element.original_tag.data, (int)node.element.original_tag.length);
            OriginalTagName = GetTagNameFromOriginalTag(node.element);
            OriginalEndTag  = NativeUtf8Helper.StringFromNativeUtf8(
                node.element.original_end_tag.data, (int)node.element.original_end_tag.length);
            NormalizedTagName = NativeUtf8Helper.StringFromNativeUtf8(
                NativeMethods.gumbo_normalized_tagname(node.element.tag));
        }
Ejemplo n.º 8
0
 internal TextWrapper(GumboTextNode node, NodeWrapper parent)
     : base(node, parent)
 {
     Text          = NativeUtf8Helper.StringFromNativeUtf8(node.text.text);
     StartPosition = node.text.start_pos;
 }
Ejemplo n.º 9
0
 public static string MarshalToString(this GumboStringPiece stringPiece)
 {
     return(NativeUtf8Helper.StringFromNativeUtf8(stringPiece.data, (int)stringPiece.length));
 }