/* CssSelectorParser.c generated by valac 0.39.3.9-ecb8a, the Vala compiler
 * generated from CssSelectorParser.vala, do not modify */

/* -*- Mode: vala; indent-tabs-mode: tab; c-basic-offset: 0; tab-width: 2 -*- */
/*
 *
 * Copyright (C) 2017  Yannick Inizan <inizan.yannick@gmail.com>
 * Copyright (C) 2017  Daniel Espinosa <esodan@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 *
 * Authors:
 *      Yannick Inizan <inizan.yannick@gmail.com>
 *      Daniel Espinosa <esodan@gmail.com>
 */

#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <gee.h>
#include <glib/gi18n-lib.h>
#include <gio/gio.h>
#include <libxml/tree.h>


#define GXML_TYPE_CSS_SELECTOR_TYPE (gxml_css_selector_type_get_type ())

#define GXML_TYPE_CSS_SELECTOR_DATA (gxml_css_selector_data_get_type ())
#define GXML_CSS_SELECTOR_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_CSS_SELECTOR_DATA, GXmlCssSelectorData))
#define GXML_CSS_SELECTOR_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_CSS_SELECTOR_DATA, GXmlCssSelectorDataClass))
#define GXML_IS_CSS_SELECTOR_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_CSS_SELECTOR_DATA))
#define GXML_IS_CSS_SELECTOR_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_CSS_SELECTOR_DATA))
#define GXML_CSS_SELECTOR_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_CSS_SELECTOR_DATA, GXmlCssSelectorDataClass))

typedef struct _GXmlCssSelectorData GXmlCssSelectorData;
typedef struct _GXmlCssSelectorDataClass GXmlCssSelectorDataClass;
typedef struct _GXmlCssSelectorDataPrivate GXmlCssSelectorDataPrivate;
enum  {
	GXML_CSS_SELECTOR_DATA_0_PROPERTY,
	GXML_CSS_SELECTOR_DATA_SELECTOR_TYPE_PROPERTY,
	GXML_CSS_SELECTOR_DATA_DATA_PROPERTY,
	GXML_CSS_SELECTOR_DATA_VALUE_PROPERTY,
	GXML_CSS_SELECTOR_DATA_NUM_PROPERTIES
};
static GParamSpec* gxml_css_selector_data_properties[GXML_CSS_SELECTOR_DATA_NUM_PROPERTIES];
#define _g_free0(var) (var = (g_free (var), NULL))

#define GXML_TYPE_CSS_SELECTOR_PARSER (gxml_css_selector_parser_get_type ())
#define GXML_CSS_SELECTOR_PARSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_CSS_SELECTOR_PARSER, GXmlCssSelectorParser))
#define GXML_CSS_SELECTOR_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_CSS_SELECTOR_PARSER, GXmlCssSelectorParserClass))
#define GXML_IS_CSS_SELECTOR_PARSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_CSS_SELECTOR_PARSER))
#define GXML_IS_CSS_SELECTOR_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_CSS_SELECTOR_PARSER))
#define GXML_CSS_SELECTOR_PARSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_CSS_SELECTOR_PARSER, GXmlCssSelectorParserClass))

typedef struct _GXmlCssSelectorParser GXmlCssSelectorParser;
typedef struct _GXmlCssSelectorParserClass GXmlCssSelectorParserClass;
typedef struct _GXmlCssSelectorParserPrivate GXmlCssSelectorParserPrivate;
enum  {
	GXML_CSS_SELECTOR_PARSER_0_PROPERTY,
	GXML_CSS_SELECTOR_PARSER_SELECTORS_PROPERTY,
	GXML_CSS_SELECTOR_PARSER_NUM_PROPERTIES
};
static GParamSpec* gxml_css_selector_parser_properties[GXML_CSS_SELECTOR_PARSER_NUM_PROPERTIES];
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))

#define GXML_TYPE_DOM_EVENT_TARGET (gxml_dom_event_target_get_type ())
#define GXML_DOM_EVENT_TARGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_EVENT_TARGET, GXmlDomEventTarget))
#define GXML_IS_DOM_EVENT_TARGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_EVENT_TARGET))
#define GXML_DOM_EVENT_TARGET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_EVENT_TARGET, GXmlDomEventTargetIface))

typedef struct _GXmlDomEventTarget GXmlDomEventTarget;
typedef struct _GXmlDomEventTargetIface GXmlDomEventTargetIface;

#define GXML_TYPE_DOM_EVENT_LISTENER (gxml_dom_event_listener_get_type ())
#define GXML_DOM_EVENT_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_EVENT_LISTENER, GXmlDomEventListener))
#define GXML_IS_DOM_EVENT_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_EVENT_LISTENER))
#define GXML_DOM_EVENT_LISTENER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_EVENT_LISTENER, GXmlDomEventListenerIface))

typedef struct _GXmlDomEventListener GXmlDomEventListener;
typedef struct _GXmlDomEventListenerIface GXmlDomEventListenerIface;

#define GXML_TYPE_DOM_EVENT (gxml_dom_event_get_type ())
#define GXML_DOM_EVENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_EVENT, GXmlDomEvent))
#define GXML_IS_DOM_EVENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_EVENT))
#define GXML_DOM_EVENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_EVENT, GXmlDomEventIface))

typedef struct _GXmlDomEvent GXmlDomEvent;
typedef struct _GXmlDomEventIface GXmlDomEventIface;

#define GXML_TYPE_DOM_TIME_STAMP (gxml_dom_time_stamp_get_type ())
#define GXML_DOM_TIME_STAMP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_TIME_STAMP, GXmlDomTimeStamp))
#define GXML_DOM_TIME_STAMP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_DOM_TIME_STAMP, GXmlDomTimeStampClass))
#define GXML_IS_DOM_TIME_STAMP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_TIME_STAMP))
#define GXML_IS_DOM_TIME_STAMP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_DOM_TIME_STAMP))
#define GXML_DOM_TIME_STAMP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_DOM_TIME_STAMP, GXmlDomTimeStampClass))

typedef struct _GXmlDomTimeStamp GXmlDomTimeStamp;
typedef struct _GXmlDomTimeStampClass GXmlDomTimeStampClass;

#define GXML_DOM_EVENT_TYPE_PHASE (gxml_dom_event_phase_get_type ())

#define GXML_TYPE_DOM_NODE (gxml_dom_node_get_type ())
#define GXML_DOM_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_NODE, GXmlDomNode))
#define GXML_IS_DOM_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_NODE))
#define GXML_DOM_NODE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_NODE, GXmlDomNodeIface))

typedef struct _GXmlDomNode GXmlDomNode;
typedef struct _GXmlDomNodeIface GXmlDomNodeIface;

#define GXML_DOM_NODE_TYPE_DOCUMENT_POSITION (gxml_dom_node_document_position_get_type ())

#define GXML_DOM_NODE_TYPE_NODE_TYPE (gxml_dom_node_node_type_get_type ())

#define GXML_TYPE_DOM_PARENT_NODE (gxml_dom_parent_node_get_type ())
#define GXML_DOM_PARENT_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_PARENT_NODE, GXmlDomParentNode))
#define GXML_IS_DOM_PARENT_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_PARENT_NODE))
#define GXML_DOM_PARENT_NODE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_PARENT_NODE, GXmlDomParentNodeIface))

typedef struct _GXmlDomParentNode GXmlDomParentNode;
typedef struct _GXmlDomParentNodeIface GXmlDomParentNodeIface;

#define GXML_TYPE_DOM_NODE_LIST (gxml_dom_node_list_get_type ())
#define GXML_DOM_NODE_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_NODE_LIST, GXmlDomNodeList))
#define GXML_IS_DOM_NODE_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_NODE_LIST))
#define GXML_DOM_NODE_LIST_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_NODE_LIST, GXmlDomNodeListIface))

typedef struct _GXmlDomNodeList GXmlDomNodeList;
typedef struct _GXmlDomNodeListIface GXmlDomNodeListIface;

#define GXML_TYPE_DOM_ELEMENT_LIST (gxml_dom_element_list_get_type ())
#define GXML_DOM_ELEMENT_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_ELEMENT_LIST, GXmlDomElementList))
#define GXML_DOM_ELEMENT_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_DOM_ELEMENT_LIST, GXmlDomElementListClass))
#define GXML_IS_DOM_ELEMENT_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_ELEMENT_LIST))
#define GXML_IS_DOM_ELEMENT_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_DOM_ELEMENT_LIST))
#define GXML_DOM_ELEMENT_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_DOM_ELEMENT_LIST, GXmlDomElementListClass))

typedef struct _GXmlDomElementList GXmlDomElementList;
typedef struct _GXmlDomElementListClass GXmlDomElementListClass;

#define GXML_TYPE_DOM_HTML_COLLECTION (gxml_dom_html_collection_get_type ())
#define GXML_DOM_HTML_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_HTML_COLLECTION, GXmlDomHTMLCollection))
#define GXML_IS_DOM_HTML_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_HTML_COLLECTION))
#define GXML_DOM_HTML_COLLECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_HTML_COLLECTION, GXmlDomHTMLCollectionIface))

typedef struct _GXmlDomHTMLCollection GXmlDomHTMLCollection;
typedef struct _GXmlDomHTMLCollectionIface GXmlDomHTMLCollectionIface;

#define GXML_TYPE_DOM_NON_ELEMENT_PARENT_NODE (gxml_dom_non_element_parent_node_get_type ())
#define GXML_DOM_NON_ELEMENT_PARENT_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_NON_ELEMENT_PARENT_NODE, GXmlDomNonElementParentNode))
#define GXML_IS_DOM_NON_ELEMENT_PARENT_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_NON_ELEMENT_PARENT_NODE))
#define GXML_DOM_NON_ELEMENT_PARENT_NODE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_NON_ELEMENT_PARENT_NODE, GXmlDomNonElementParentNodeIface))

typedef struct _GXmlDomNonElementParentNode GXmlDomNonElementParentNode;
typedef struct _GXmlDomNonElementParentNodeIface GXmlDomNonElementParentNodeIface;

#define GXML_TYPE_DOM_DOCUMENT (gxml_dom_document_get_type ())
#define GXML_DOM_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_DOCUMENT, GXmlDomDocument))
#define GXML_IS_DOM_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_DOCUMENT))
#define GXML_DOM_DOCUMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_DOCUMENT, GXmlDomDocumentIface))

typedef struct _GXmlDomDocument GXmlDomDocument;
typedef struct _GXmlDomDocumentIface GXmlDomDocumentIface;

#define GXML_TYPE_DOM_DOCUMENT_FRAGMENT (gxml_dom_document_fragment_get_type ())
#define GXML_DOM_DOCUMENT_FRAGMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_DOCUMENT_FRAGMENT, GXmlDomDocumentFragment))
#define GXML_IS_DOM_DOCUMENT_FRAGMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_DOCUMENT_FRAGMENT))
#define GXML_DOM_DOCUMENT_FRAGMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_DOCUMENT_FRAGMENT, GXmlDomDocumentFragmentIface))

typedef struct _GXmlDomDocumentFragment GXmlDomDocumentFragment;
typedef struct _GXmlDomDocumentFragmentIface GXmlDomDocumentFragmentIface;

#define GXML_TYPE_DOM_NON_DOCUMENT_TYPE_CHILD_NODE (gxml_dom_non_document_type_child_node_get_type ())
#define GXML_DOM_NON_DOCUMENT_TYPE_CHILD_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_NON_DOCUMENT_TYPE_CHILD_NODE, GXmlDomNonDocumentTypeChildNode))
#define GXML_IS_DOM_NON_DOCUMENT_TYPE_CHILD_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_NON_DOCUMENT_TYPE_CHILD_NODE))
#define GXML_DOM_NON_DOCUMENT_TYPE_CHILD_NODE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_NON_DOCUMENT_TYPE_CHILD_NODE, GXmlDomNonDocumentTypeChildNodeIface))

typedef struct _GXmlDomNonDocumentTypeChildNode GXmlDomNonDocumentTypeChildNode;
typedef struct _GXmlDomNonDocumentTypeChildNodeIface GXmlDomNonDocumentTypeChildNodeIface;

#define GXML_TYPE_DOM_CHILD_NODE (gxml_dom_child_node_get_type ())
#define GXML_DOM_CHILD_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_CHILD_NODE, GXmlDomChildNode))
#define GXML_IS_DOM_CHILD_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_CHILD_NODE))
#define GXML_DOM_CHILD_NODE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_CHILD_NODE, GXmlDomChildNodeIface))

typedef struct _GXmlDomChildNode GXmlDomChildNode;
typedef struct _GXmlDomChildNodeIface GXmlDomChildNodeIface;

#define GXML_TYPE_DOM_CHARACTER_DATA (gxml_dom_character_data_get_type ())
#define GXML_DOM_CHARACTER_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_CHARACTER_DATA, GXmlDomCharacterData))
#define GXML_IS_DOM_CHARACTER_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_CHARACTER_DATA))
#define GXML_DOM_CHARACTER_DATA_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_CHARACTER_DATA, GXmlDomCharacterDataIface))

typedef struct _GXmlDomCharacterData GXmlDomCharacterData;
typedef struct _GXmlDomCharacterDataIface GXmlDomCharacterDataIface;

#define GXML_TYPE_DOM_TEXT (gxml_dom_text_get_type ())
#define GXML_DOM_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_TEXT, GXmlDomText))
#define GXML_IS_DOM_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_TEXT))
#define GXML_DOM_TEXT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_TEXT, GXmlDomTextIface))

typedef struct _GXmlDomText GXmlDomText;
typedef struct _GXmlDomTextIface GXmlDomTextIface;

#define GXML_TYPE_DOM_COMMENT (gxml_dom_comment_get_type ())
#define GXML_DOM_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_COMMENT, GXmlDomComment))
#define GXML_IS_DOM_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_COMMENT))
#define GXML_DOM_COMMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_COMMENT, GXmlDomCommentIface))

typedef struct _GXmlDomComment GXmlDomComment;
typedef struct _GXmlDomCommentIface GXmlDomCommentIface;

#define GXML_TYPE_DOM_PROCESSING_INSTRUCTION (gxml_dom_processing_instruction_get_type ())
#define GXML_DOM_PROCESSING_INSTRUCTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_PROCESSING_INSTRUCTION, GXmlDomProcessingInstruction))
#define GXML_IS_DOM_PROCESSING_INSTRUCTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_PROCESSING_INSTRUCTION))
#define GXML_DOM_PROCESSING_INSTRUCTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_PROCESSING_INSTRUCTION, GXmlDomProcessingInstructionIface))

typedef struct _GXmlDomProcessingInstruction GXmlDomProcessingInstruction;
typedef struct _GXmlDomProcessingInstructionIface GXmlDomProcessingInstructionIface;

#define GXML_TYPE_DOM_RANGE (gxml_dom_range_get_type ())
#define GXML_DOM_RANGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_RANGE, GXmlDomRange))
#define GXML_IS_DOM_RANGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_RANGE))
#define GXML_DOM_RANGE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_RANGE, GXmlDomRangeIface))

typedef struct _GXmlDomRange GXmlDomRange;
typedef struct _GXmlDomRangeIface GXmlDomRangeIface;

#define GXML_DOM_RANGE_TYPE_BOUNDARY_POINTS (gxml_dom_range_boundary_points_get_type ())

#define GXML_TYPE_DOM_NODE_FILTER (gxml_dom_node_filter_get_type ())
#define GXML_DOM_NODE_FILTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_NODE_FILTER, GXmlDomNodeFilter))
#define GXML_DOM_NODE_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_DOM_NODE_FILTER, GXmlDomNodeFilterClass))
#define GXML_IS_DOM_NODE_FILTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_NODE_FILTER))
#define GXML_IS_DOM_NODE_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_DOM_NODE_FILTER))
#define GXML_DOM_NODE_FILTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_DOM_NODE_FILTER, GXmlDomNodeFilterClass))

typedef struct _GXmlDomNodeFilter GXmlDomNodeFilter;
typedef struct _GXmlDomNodeFilterClass GXmlDomNodeFilterClass;

#define GXML_TYPE_DOM_NODE_ITERATOR (gxml_dom_node_iterator_get_type ())
#define GXML_DOM_NODE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_NODE_ITERATOR, GXmlDomNodeIterator))
#define GXML_IS_DOM_NODE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_NODE_ITERATOR))
#define GXML_DOM_NODE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_NODE_ITERATOR, GXmlDomNodeIteratorIface))

typedef struct _GXmlDomNodeIterator GXmlDomNodeIterator;
typedef struct _GXmlDomNodeIteratorIface GXmlDomNodeIteratorIface;

#define GXML_TYPE_DOM_TREE_WALKER (gxml_dom_tree_walker_get_type ())
#define GXML_DOM_TREE_WALKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_TREE_WALKER, GXmlDomTreeWalker))
#define GXML_IS_DOM_TREE_WALKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_TREE_WALKER))
#define GXML_DOM_TREE_WALKER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_TREE_WALKER, GXmlDomTreeWalkerIface))

typedef struct _GXmlDomTreeWalker GXmlDomTreeWalker;
typedef struct _GXmlDomTreeWalkerIface GXmlDomTreeWalkerIface;

#define GXML_TYPE_DOM_IMPLEMENTATION (gxml_dom_implementation_get_type ())
#define GXML_DOM_IMPLEMENTATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_IMPLEMENTATION, GXmlDomImplementation))
#define GXML_IS_DOM_IMPLEMENTATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_IMPLEMENTATION))
#define GXML_DOM_IMPLEMENTATION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_IMPLEMENTATION, GXmlDomImplementationIface))

typedef struct _GXmlDomImplementation GXmlDomImplementation;
typedef struct _GXmlDomImplementationIface GXmlDomImplementationIface;

#define GXML_TYPE_DOM_DOCUMENT_TYPE (gxml_dom_document_type_get_type ())
#define GXML_DOM_DOCUMENT_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_DOCUMENT_TYPE, GXmlDomDocumentType))
#define GXML_IS_DOM_DOCUMENT_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_DOCUMENT_TYPE))
#define GXML_DOM_DOCUMENT_TYPE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_DOCUMENT_TYPE, GXmlDomDocumentTypeIface))

typedef struct _GXmlDomDocumentType GXmlDomDocumentType;
typedef struct _GXmlDomDocumentTypeIface GXmlDomDocumentTypeIface;

#define GXML_TYPE_DOM_XML_DOCUMENT (gxml_dom_xml_document_get_type ())
#define GXML_DOM_XML_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_XML_DOCUMENT, GXmlDomXMLDocument))
#define GXML_IS_DOM_XML_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_XML_DOCUMENT))
#define GXML_DOM_XML_DOCUMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_XML_DOCUMENT, GXmlDomXMLDocumentIface))

typedef struct _GXmlDomXMLDocument GXmlDomXMLDocument;
typedef struct _GXmlDomXMLDocumentIface GXmlDomXMLDocumentIface;

#define GXML_TYPE_NODE (gxml_node_get_type ())
#define GXML_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_NODE, GXmlNode))
#define GXML_IS_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_NODE))
#define GXML_NODE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_NODE, GXmlNodeIface))

typedef struct _GXmlNode GXmlNode;
typedef struct _GXmlNodeIface GXmlNodeIface;

#define GXML_TYPE_ELEMENT_LIST (gxml_element_list_get_type ())
#define GXML_ELEMENT_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_ELEMENT_LIST, GXmlElementList))
#define GXML_ELEMENT_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_ELEMENT_LIST, GXmlElementListClass))
#define GXML_IS_ELEMENT_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_ELEMENT_LIST))
#define GXML_IS_ELEMENT_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_ELEMENT_LIST))
#define GXML_ELEMENT_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_ELEMENT_LIST, GXmlElementListClass))

typedef struct _GXmlElementList GXmlElementList;
typedef struct _GXmlElementListClass GXmlElementListClass;

#define GXML_TYPE_NAMESPACE (gxml_namespace_get_type ())
#define GXML_NAMESPACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_NAMESPACE, GXmlNamespace))
#define GXML_IS_NAMESPACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_NAMESPACE))
#define GXML_NAMESPACE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_NAMESPACE, GXmlNamespaceIface))

typedef struct _GXmlNamespace GXmlNamespace;
typedef struct _GXmlNamespaceIface GXmlNamespaceIface;

#define GXML_TYPE_NODE_TYPE (gxml_node_type_get_type ())

#define GXML_TYPE_DOCUMENT (gxml_document_get_type ())
#define GXML_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOCUMENT, GXmlDocument))
#define GXML_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOCUMENT))
#define GXML_DOCUMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOCUMENT, GXmlDocumentIface))

typedef struct _GXmlDocument GXmlDocument;
typedef struct _GXmlDocumentIface GXmlDocumentIface;

#define GXML_TYPE_DOM_ELEMENT (gxml_dom_element_get_type ())
#define GXML_DOM_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_ELEMENT, GXmlDomElement))
#define GXML_IS_DOM_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_ELEMENT))
#define GXML_DOM_ELEMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_ELEMENT, GXmlDomElementIface))

typedef struct _GXmlDomElement GXmlDomElement;
typedef struct _GXmlDomElementIface GXmlDomElementIface;

#define GXML_TYPE_DOM_TOKEN_LIST (gxml_dom_token_list_get_type ())
#define GXML_DOM_TOKEN_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_TOKEN_LIST, GXmlDomTokenList))
#define GXML_IS_DOM_TOKEN_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_TOKEN_LIST))
#define GXML_DOM_TOKEN_LIST_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_TOKEN_LIST, GXmlDomTokenListIface))

typedef struct _GXmlDomTokenList GXmlDomTokenList;
typedef struct _GXmlDomTokenListIface GXmlDomTokenListIface;

#define GXML_TYPE_DOM_NAMED_NODE_MAP (gxml_dom_named_node_map_get_type ())
#define GXML_DOM_NAMED_NODE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_NAMED_NODE_MAP, GXmlDomNamedNodeMap))
#define GXML_IS_DOM_NAMED_NODE_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_NAMED_NODE_MAP))
#define GXML_DOM_NAMED_NODE_MAP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_NAMED_NODE_MAP, GXmlDomNamedNodeMapIface))

typedef struct _GXmlDomNamedNodeMap GXmlDomNamedNodeMap;
typedef struct _GXmlDomNamedNodeMapIface GXmlDomNamedNodeMapIface;

#define GXML_TYPE_GDOM_TOKEN_LIST (gxml_gdom_token_list_get_type ())
#define GXML_GDOM_TOKEN_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_GDOM_TOKEN_LIST, GXmlGDomTokenList))
#define GXML_GDOM_TOKEN_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_GDOM_TOKEN_LIST, GXmlGDomTokenListClass))
#define GXML_IS_GDOM_TOKEN_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_GDOM_TOKEN_LIST))
#define GXML_IS_GDOM_TOKEN_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_GDOM_TOKEN_LIST))
#define GXML_GDOM_TOKEN_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_GDOM_TOKEN_LIST, GXmlGDomTokenListClass))

typedef struct _GXmlGDomTokenList GXmlGDomTokenList;
typedef struct _GXmlGDomTokenListClass GXmlGDomTokenListClass;

#define GXML_TYPE_GOM_NODE (gxml_gom_node_get_type ())
#define GXML_GOM_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_GOM_NODE, GXmlGomNode))
#define GXML_GOM_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_GOM_NODE, GXmlGomNodeClass))
#define GXML_IS_GOM_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_GOM_NODE))
#define GXML_IS_GOM_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_GOM_NODE))
#define GXML_GOM_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_GOM_NODE, GXmlGomNodeClass))

typedef struct _GXmlGomNode GXmlGomNode;
typedef struct _GXmlGomNodeClass GXmlGomNodeClass;

#define GXML_TYPE_GOM_ELEMENT (gxml_gom_element_get_type ())
#define GXML_GOM_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_GOM_ELEMENT, GXmlGomElement))
#define GXML_GOM_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_GOM_ELEMENT, GXmlGomElementClass))
#define GXML_IS_GOM_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_GOM_ELEMENT))
#define GXML_IS_GOM_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_GOM_ELEMENT))
#define GXML_GOM_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_GOM_ELEMENT, GXmlGomElementClass))

typedef struct _GXmlGomElement GXmlGomElement;
typedef struct _GXmlGomElementClass GXmlGomElementClass;

#define GXML_TYPE_GNODE (gxml_gnode_get_type ())
#define GXML_GNODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_GNODE, GXmlGNode))
#define GXML_GNODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_GNODE, GXmlGNodeClass))
#define GXML_IS_GNODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_GNODE))
#define GXML_IS_GNODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_GNODE))
#define GXML_GNODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_GNODE, GXmlGNodeClass))

typedef struct _GXmlGNode GXmlGNode;
typedef struct _GXmlGNodeClass GXmlGNodeClass;

#define GXML_TYPE_GCHILD_NODE (gxml_gchild_node_get_type ())
#define GXML_GCHILD_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_GCHILD_NODE, GXmlGChildNode))
#define GXML_GCHILD_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_GCHILD_NODE, GXmlGChildNodeClass))
#define GXML_IS_GCHILD_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_GCHILD_NODE))
#define GXML_IS_GCHILD_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_GCHILD_NODE))
#define GXML_GCHILD_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_GCHILD_NODE, GXmlGChildNodeClass))

typedef struct _GXmlGChildNode GXmlGChildNode;
typedef struct _GXmlGChildNodeClass GXmlGChildNodeClass;

#define GXML_TYPE_GNON_DOCUMENT_CHILD_NODE (gxml_gnon_document_child_node_get_type ())
#define GXML_GNON_DOCUMENT_CHILD_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_GNON_DOCUMENT_CHILD_NODE, GXmlGNonDocumentChildNode))
#define GXML_GNON_DOCUMENT_CHILD_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_GNON_DOCUMENT_CHILD_NODE, GXmlGNonDocumentChildNodeClass))
#define GXML_IS_GNON_DOCUMENT_CHILD_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_GNON_DOCUMENT_CHILD_NODE))
#define GXML_IS_GNON_DOCUMENT_CHILD_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_GNON_DOCUMENT_CHILD_NODE))
#define GXML_GNON_DOCUMENT_CHILD_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_GNON_DOCUMENT_CHILD_NODE, GXmlGNonDocumentChildNodeClass))

typedef struct _GXmlGNonDocumentChildNode GXmlGNonDocumentChildNode;
typedef struct _GXmlGNonDocumentChildNodeClass GXmlGNonDocumentChildNodeClass;

#define GXML_TYPE_GELEMENT (gxml_gelement_get_type ())
#define GXML_GELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_GELEMENT, GXmlGElement))
#define GXML_GELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_GELEMENT, GXmlGElementClass))
#define GXML_IS_GELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_GELEMENT))
#define GXML_IS_GELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_GELEMENT))
#define GXML_GELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_GELEMENT, GXmlGElementClass))

typedef struct _GXmlGElement GXmlGElement;
typedef struct _GXmlGElementClass GXmlGElementClass;

#define GXML_TYPE_DOM_HTML_DOCUMENT (gxml_dom_html_document_get_type ())
#define GXML_DOM_HTML_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOM_HTML_DOCUMENT, GXmlDomHtmlDocument))
#define GXML_IS_DOM_HTML_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOM_HTML_DOCUMENT))
#define GXML_DOM_HTML_DOCUMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOM_HTML_DOCUMENT, GXmlDomHtmlDocumentIface))

typedef struct _GXmlDomHtmlDocument GXmlDomHtmlDocument;
typedef struct _GXmlDomHtmlDocumentIface GXmlDomHtmlDocumentIface;

typedef enum  {
	GXML_CSS_SELECTOR_ERROR_NULL,
	GXML_CSS_SELECTOR_ERROR_ATTRIBUTE,
	GXML_CSS_SELECTOR_ERROR_INVALID,
	GXML_CSS_SELECTOR_ERROR_LENGTH,
	GXML_CSS_SELECTOR_ERROR_STRING,
	GXML_CSS_SELECTOR_ERROR_TYPE
} GXmlCssSelectorError;
#define GXML_CSS_SELECTOR_ERROR gxml_css_selector_error_quark ()
typedef enum  {
	GXML_CSS_SELECTOR_TYPE_CLASS,
	GXML_CSS_SELECTOR_TYPE_ID,
	GXML_CSS_SELECTOR_TYPE_ALL,
	GXML_CSS_SELECTOR_TYPE_ELEMENT,
	GXML_CSS_SELECTOR_TYPE_ATTRIBUTE,
	GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_EQUAL,
	GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_CONTAINS,
	GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_SUBSTRING,
	GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH,
	GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH_HYPHEN,
	GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_END_WITH,
	GXML_CSS_SELECTOR_TYPE_PSEUDO,
	GXML_CSS_SELECTOR_TYPE_AND,
	GXML_CSS_SELECTOR_TYPE_INSIDE,
	GXML_CSS_SELECTOR_TYPE_PARENT,
	GXML_CSS_SELECTOR_TYPE_AFTER,
	GXML_CSS_SELECTOR_TYPE_BEFORE
} GXmlCssSelectorType;

struct _GXmlCssSelectorData {
	GObject parent_instance;
	GXmlCssSelectorDataPrivate * priv;
};

struct _GXmlCssSelectorDataClass {
	GObjectClass parent_class;
};

struct _GXmlCssSelectorDataPrivate {
	GXmlCssSelectorType _selector_type;
	gchar* _data;
	gchar* _value;
};

struct _GXmlCssSelectorParser {
	GObject parent_instance;
	GXmlCssSelectorParserPrivate * priv;
};

struct _GXmlCssSelectorParserClass {
	GObjectClass parent_class;
};

struct _GXmlCssSelectorParserPrivate {
	GeeArrayList* list;
};

typedef enum  {
	GXML_DOM_EVENT_PHASE_NONE = 0,
	GXML_DOM_EVENT_PHASE_CAPTURING_PHASE,
	GXML_DOM_EVENT_PHASE_AT_TARGET,
	GXML_DOM_EVENT_PHASE_BUBBLING_PHASE
} GXmlDomEventPhase;

struct _GXmlDomEventIface {
	GTypeInterface parent_iface;
	void (*stop_propagation) (GXmlDomEvent* self);
	void (*stop_immediate_propagation) (GXmlDomEvent* self);
	void (*prevent_default) (GXmlDomEvent* self);
	void (*init_event) (GXmlDomEvent* self, const gchar* type, gboolean bubbles, gboolean cancelable);
	const gchar* (*get_etype) (GXmlDomEvent* self);
	GXmlDomEventTarget* (*get_event_target) (GXmlDomEvent* self);
	GXmlDomEventTarget* (*get_current_target) (GXmlDomEvent* self);
	gboolean (*get_bubbles) (GXmlDomEvent* self);
	gboolean (*get_cancelable) (GXmlDomEvent* self);
	gboolean (*get_is_trusted) (GXmlDomEvent* self);
	GXmlDomTimeStamp* (*get_time_stamp) (GXmlDomEvent* self);
	gboolean (*get_default_prevented) (GXmlDomEvent* self);
	GXmlDomEventPhase (*get_event_phase) (GXmlDomEvent* self);
};

struct _GXmlDomEventListenerIface {
	GTypeInterface parent_iface;
	void (*handle_event) (GXmlDomEventListener* self, GXmlDomEvent* event);
};

struct _GXmlDomEventTargetIface {
	GTypeInterface parent_iface;
	void (*add_event_listener) (GXmlDomEventTarget* self, const gchar* type, GXmlDomEventListener* callback, gboolean capture);
	void (*remove_event_listener) (GXmlDomEventTarget* self, const gchar* type, GXmlDomEventListener* callback, gboolean capture);
	gboolean (*dispatch_event) (GXmlDomEventTarget* self, GXmlDomEvent* event, GError** error);
};

typedef enum  {
	GXML_DOM_NODE_DOCUMENT_POSITION_NONE = 1 << 0,
	GXML_DOM_NODE_DOCUMENT_POSITION_DISCONNECTED = 1 << 1,
	GXML_DOM_NODE_DOCUMENT_POSITION_PRECEDING = 1 << 2,
	GXML_DOM_NODE_DOCUMENT_POSITION_FOLLOWING = 1 << 3,
	GXML_DOM_NODE_DOCUMENT_POSITION_CONTAINS = 1 << 4,
	GXML_DOM_NODE_DOCUMENT_POSITION_CONTAINED_BY = 1 << 5,
	GXML_DOM_NODE_DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 1 << 6
} GXmlDomNodeDocumentPosition;

typedef enum  {
	GXML_DOM_NODE_NODE_TYPE_INVALID = 0,
	GXML_DOM_NODE_NODE_TYPE_ELEMENT_NODE = 1,
	GXML_DOM_NODE_NODE_TYPE_ATTRIBUTE_NODE,
	GXML_DOM_NODE_NODE_TYPE_TEXT_NODE,
	GXML_DOM_NODE_NODE_TYPE_CDATA_SECTION_NODE,
	GXML_DOM_NODE_NODE_TYPE_ENTITY_REFERENCE_NODE,
	GXML_DOM_NODE_NODE_TYPE_ENTITY_NODE,
	GXML_DOM_NODE_NODE_TYPE_PROCESSING_INSTRUCTION_NODE,
	GXML_DOM_NODE_NODE_TYPE_COMMENT_NODE,
	GXML_DOM_NODE_NODE_TYPE_DOCUMENT_NODE,
	GXML_DOM_NODE_NODE_TYPE_DOCUMENT_TYPE_NODE,
	GXML_DOM_NODE_NODE_TYPE_DOCUMENT_FRAGMENT_NODE,
	GXML_DOM_NODE_NODE_TYPE_NOTATION_NODE
} GXmlDomNodeNodeType;

struct _GXmlDomNodeListIface {
	GTypeInterface parent_iface;
	GXmlDomNode* (*item) (GXmlDomNodeList* self, gint index);
	gint (*get_length) (GXmlDomNodeList* self);
};

struct _GXmlDomHTMLCollectionIface {
	GTypeInterface parent_iface;
	GXmlDomElement* (*get_element) (GXmlDomHTMLCollection* self, gint index);
	GXmlDomElement** (*to_array) (GXmlDomHTMLCollection* self, int* result_length1);
	GXmlDomElement* (*item) (GXmlDomHTMLCollection* self, gint index);
	GXmlDomElement* (*named_item) (GXmlDomHTMLCollection* self, const gchar* name);
	gint (*get_length) (GXmlDomHTMLCollection* self);
};

struct _GXmlDomParentNodeIface {
	GTypeInterface parent_iface;
	GXmlDomElement* (*query_selector) (GXmlDomParentNode* self, const gchar* selectors, GError** error);
	GXmlDomNodeList* (*query_selector_all) (GXmlDomParentNode* self, const gchar* selectors, GError** error);
	GXmlDomElementList* (*get_elements_by_property_value) (GXmlDomParentNode* self, const gchar* property, const gchar* value);
	GXmlDomHTMLCollection* (*get_children) (GXmlDomParentNode* self);
	GXmlDomElement* (*get_first_element_child) (GXmlDomParentNode* self);
	GXmlDomElement* (*get_last_element_child) (GXmlDomParentNode* self);
	gint (*get_child_element_count) (GXmlDomParentNode* self);
};

struct _GXmlDomNonElementParentNodeIface {
	GTypeInterface parent_iface;
	GXmlDomElement* (*get_element_by_id) (GXmlDomNonElementParentNode* self, const gchar* element_id, GError** error);
};

struct _GXmlDomDocumentFragmentIface {
	GTypeInterface parent_iface;
};

struct _GXmlDomNonDocumentTypeChildNodeIface {
	GTypeInterface parent_iface;
	GXmlDomElement* (*get_previous_element_sibling) (GXmlDomNonDocumentTypeChildNode* self);
	GXmlDomElement* (*get_next_element_sibling) (GXmlDomNonDocumentTypeChildNode* self);
};

struct _GXmlDomChildNodeIface {
	GTypeInterface parent_iface;
	void (*remove) (GXmlDomChildNode* self);
};

struct _GXmlDomCharacterDataIface {
	GTypeInterface parent_iface;
	gchar* (*substring_data) (GXmlDomCharacterData* self, gint offset, gint count, GError** error);
	void (*append_data) (GXmlDomCharacterData* self, const gchar* data);
	void (*insert_data) (GXmlDomCharacterData* self, gint offset, const gchar* data, GError** error);
	void (*delete_data) (GXmlDomCharacterData* self, gint offset, gint count, GError** error);
	void (*replace_data) (GXmlDomCharacterData* self, gint offset, gint count, const gchar* data, GError** error);
	gchar* (*get_data) (GXmlDomCharacterData* self);
	void (*set_data) (GXmlDomCharacterData* self, const gchar* value);
	gint (*get_length) (GXmlDomCharacterData* self);
};

struct _GXmlDomTextIface {
	GTypeInterface parent_iface;
	GXmlDomText* (*split_text) (GXmlDomText* self, gint offset, GError** error);
	gchar* (*get_whole_text) (GXmlDomText* self);
};

struct _GXmlDomCommentIface {
	GTypeInterface parent_iface;
};

struct _GXmlDomProcessingInstructionIface {
	GTypeInterface parent_iface;
	gchar* (*get_target) (GXmlDomProcessingInstruction* self);
};

typedef enum  {
	GXML_DOM_RANGE_BOUNDARY_POINTS_START_TO_START = 0,
	GXML_DOM_RANGE_BOUNDARY_POINTS_START_TO_END,
	GXML_DOM_RANGE_BOUNDARY_POINTS_END_TO_END,
	GXML_DOM_RANGE_BOUNDARY_POINTS_END_TO_START
} GXmlDomRangeBoundaryPoints;

struct _GXmlDomRangeIface {
	GTypeInterface parent_iface;
	void (*set_start) (GXmlDomRange* self, GXmlDomNode* node, gint offset, GError** error);
	void (*set_end) (GXmlDomRange* self, GXmlDomNode* node, gint offset, GError** error);
	void (*set_start_before) (GXmlDomRange* self, GXmlDomNode* node, GError** error);
	void (*set_start_after) (GXmlDomRange* self, GXmlDomNode* node, GError** error);
	void (*set_end_before) (GXmlDomRange* self, GXmlDomNode* node, GError** error);
	void (*set_end_after) (GXmlDomRange* self, GXmlDomNode* node, GError** error);
	void (*collapse) (GXmlDomRange* self, gboolean to_start, GError** error);
	void (*select_node) (GXmlDomRange* self, GXmlDomNode* node, GError** error);
	void (*select_node_contents) (GXmlDomRange* self, GXmlDomNode* node, GError** error);
	gint (*compare_boundary_points) (GXmlDomRange* self, GXmlDomRangeBoundaryPoints how, GXmlDomRange* sourceRange, GError** error);
	void (*delete_contents) (GXmlDomRange* self, GError** error);
	GXmlDomDocumentFragment* (*extract_contents) (GXmlDomRange* self, GError** error);
	GXmlDomDocumentFragment* (*clone_contents) (GXmlDomRange* self, GError** error);
	void (*insert_node) (GXmlDomRange* self, GXmlDomNode* node);
	void (*surround_contents) (GXmlDomRange* self, GXmlDomNode* newParent);
	GXmlDomRange* (*clone_range) (GXmlDomRange* self);
	void (*detach) (GXmlDomRange* self);
	gboolean (*is_point_in_range) (GXmlDomRange* self, GXmlDomNode* node, gint offset);
	gshort (*compare_point) (GXmlDomRange* self, GXmlDomNode* node, gint offset);
	gboolean (*intersects_node) (GXmlDomRange* self, GXmlDomNode* node);
	gchar* (*to_string) (GXmlDomRange* self);
	GXmlDomNode* (*get_start_container) (GXmlDomRange* self);
	gint (*get_start_offset) (GXmlDomRange* self);
	GXmlDomNode* (*get_end_container) (GXmlDomRange* self);
	gint (*get_end_offset) (GXmlDomRange* self);
	gboolean (*get_collapsed) (GXmlDomRange* self);
	GXmlDomNode* (*get_common_ancestor_container) (GXmlDomRange* self);
};

struct _GXmlDomNodeIteratorIface {
	GTypeInterface parent_iface;
	GXmlDomNode* (*next_node) (GXmlDomNodeIterator* self);
	GXmlDomNode* (*previous_node) (GXmlDomNodeIterator* self);
	void (*detach) (GXmlDomNodeIterator* self);
	GXmlDomNode* (*get_root) (GXmlDomNodeIterator* self);
	GXmlDomNode* (*get_reference_node) (GXmlDomNodeIterator* self);
	gboolean (*get_pointer_before_reference_node) (GXmlDomNodeIterator* self);
	gint (*get_what_to_show) (GXmlDomNodeIterator* self);
	GXmlDomNodeFilter* (*get_filter) (GXmlDomNodeIterator* self);
};

struct _GXmlDomTreeWalkerIface {
	GTypeInterface parent_iface;
	GXmlDomNode* (*parentNode) (GXmlDomTreeWalker* self);
	GXmlDomNode* (*firstChild) (GXmlDomTreeWalker* self);
	GXmlDomNode* (*lastChild) (GXmlDomTreeWalker* self);
	GXmlDomNode* (*previousSibling) (GXmlDomTreeWalker* self);
	GXmlDomNode* (*nextSibling) (GXmlDomTreeWalker* self);
	GXmlDomNode* (*previousNode) (GXmlDomTreeWalker* self);
	GXmlDomNode* (*nextNode) (GXmlDomTreeWalker* self);
	GXmlDomNode* (*get_root) (GXmlDomTreeWalker* self);
	gint (*get_what_to_show) (GXmlDomTreeWalker* self);
	GXmlDomNodeFilter* (*get_filter) (GXmlDomTreeWalker* self);
	GXmlDomNode* (*get_current_node) (GXmlDomTreeWalker* self);
};

struct _GXmlDomDocumentTypeIface {
	GTypeInterface parent_iface;
	const gchar* (*get_name) (GXmlDomDocumentType* self);
	const gchar* (*get_public_id) (GXmlDomDocumentType* self);
	const gchar* (*get_system_id) (GXmlDomDocumentType* self);
};

struct _GXmlDomXMLDocumentIface {
	GTypeInterface parent_iface;
};

struct _GXmlNamespaceIface {
	GTypeInterface parent_iface;
	gchar* (*get_uri) (GXmlNamespace* self);
	gchar* (*get_prefix) (GXmlNamespace* self);
};

typedef enum  {
	GXML_NODE_TYPE_INVALID = 0,
	GXML_NODE_TYPE_ELEMENT = 1,
	GXML_NODE_TYPE_ATTRIBUTE,
	GXML_NODE_TYPE_TEXT,
	GXML_NODE_TYPE_CDATA_SECTION,
	GXML_NODE_TYPE_ENTITY_REFERENCE,
	GXML_NODE_TYPE_ENTITY,
	GXML_NODE_TYPE_PROCESSING_INSTRUCTION,
	GXML_NODE_TYPE_COMMENT,
	GXML_NODE_TYPE_DOCUMENT,
	GXML_NODE_TYPE_DOCUMENT_TYPE,
	GXML_NODE_TYPE_DOCUMENT_FRAGMENT,
	GXML_NODE_TYPE_NOTATION
} GXmlNodeType;

struct _GXmlNodeIface {
	GTypeInterface parent_iface;
	GXmlNode* (*get) (GXmlNode* self, const gchar* key);
	GXmlElementList* (*get_elements_by_property_value) (GXmlNode* self, const gchar* property, const gchar* value);
	GXmlElementList* (*get_elements_by_name) (GXmlNode* self, const gchar* name);
	GXmlElementList* (*get_elements_by_name_ns) (GXmlNode* self, const gchar* name, const gchar* ns);
	gchar* (*to_string) (GXmlNode* self);
	gboolean (*set_namespace) (GXmlNode* self, const gchar* uri, const gchar* prefix);
	gchar* (*ns_prefix) (GXmlNode* self);
	gchar* (*ns_uri) (GXmlNode* self);
	GeeList* (*get_namespaces) (GXmlNode* self);
	GeeBidirList* (*get_children_nodes) (GXmlNode* self);
	GeeMap* (*get_attrs) (GXmlNode* self);
	gchar* (*get_name) (GXmlNode* self);
	gchar* (*get_value) (GXmlNode* self);
	void (*set_value) (GXmlNode* self, const gchar* value);
	GXmlNodeType (*get_type_node) (GXmlNode* self);
	GXmlDocument* (*get_document) (GXmlNode* self);
	GXmlNode* (*get_parent) (GXmlNode* self);
};

struct _GXmlDocumentIface {
	GTypeInterface parent_iface;
	GXmlNode* (*create_element) (GXmlDocument* self, const gchar* name, GError** error);
	GXmlNode* (*create_text) (GXmlDocument* self, const gchar* text);
	GXmlNode* (*create_comment) (GXmlDocument* self, const gchar* text);
	GXmlNode* (*create_cdata) (GXmlDocument* self, const gchar* text);
	GXmlNode* (*create_pi) (GXmlDocument* self, const gchar* target, const gchar* data);
	gboolean (*save) (GXmlDocument* self, GCancellable* cancellable, GError** error);
	gboolean (*save_as) (GXmlDocument* self, GFile* f, GCancellable* cancellable, GError** error);
	gboolean (*get_indent) (GXmlDocument* self);
	void (*set_indent) (GXmlDocument* self, gboolean value);
	gboolean (*get_ns_top) (GXmlDocument* self);
	void (*set_ns_top) (GXmlDocument* self, gboolean value);
	gboolean (*get_prefix_default_ns) (GXmlDocument* self);
	void (*set_prefix_default_ns) (GXmlDocument* self, gboolean value);
	gboolean (*get_backup) (GXmlDocument* self);
	void (*set_backup) (GXmlDocument* self, gboolean value);
	GXmlNode* (*get_root) (GXmlDocument* self);
	GFile* (*get_file) (GXmlDocument* self);
	void (*set_file) (GXmlDocument* self, GFile* value);
};

struct _GXmlDomImplementationIface {
	GTypeInterface parent_iface;
	GXmlDomDocumentType* (*create_document_type) (GXmlDomImplementation* self, const gchar* qualified_name, const gchar* public_id, const gchar* system_id, GError** error);
	GXmlDomXMLDocument* (*create_document) (GXmlDomImplementation* self, const gchar* nspace, const gchar* qualified_name, GXmlDomDocumentType* doctype, GError** error);
	GXmlDocument* (*create_html_document) (GXmlDomImplementation* self, const gchar* title);
	gboolean (*has_feature) (GXmlDomImplementation* self);
};

struct _GXmlDomDocumentIface {
	GTypeInterface parent_iface;
	GXmlDomHTMLCollection* (*get_elements_by_tag_name) (GXmlDomDocument* self, const gchar* local_name);
	GXmlDomHTMLCollection* (*get_elements_by_tag_name_ns) (GXmlDomDocument* self, const gchar* namespace, const gchar* local_name);
	GXmlDomHTMLCollection* (*get_elements_by_class_name) (GXmlDomDocument* self, const gchar* classNames);
	GXmlDomElement* (*create_element) (GXmlDomDocument* self, const gchar* local_name, GError** error);
	GXmlDomElement* (*create_element_ns) (GXmlDomDocument* self, const gchar* namespace, const gchar* qualified_name, GError** error);
	GXmlDomDocumentFragment* (*create_document_fragment) (GXmlDomDocument* self);
	GXmlDomText* (*create_text_node) (GXmlDomDocument* self, const gchar* data, GError** error);
	GXmlDomComment* (*create_comment) (GXmlDomDocument* self, const gchar* data, GError** error);
	GXmlDomProcessingInstruction* (*create_processing_instruction) (GXmlDomDocument* self, const gchar* target, const gchar* data, GError** error);
	GXmlDomNode* (*import_node) (GXmlDomDocument* self, GXmlDomNode* node, gboolean deep, GError** error);
	GXmlDomNode* (*adopt_node) (GXmlDomDocument* self, GXmlDomNode* node, GError** error);
	GXmlDomEvent* (*create_event) (GXmlDomDocument* self, const gchar* interface, GError** error);
	GXmlDomRange* (*create_range) (GXmlDomDocument* self);
	GXmlDomNodeIterator* (*create_node_iterator) (GXmlDomDocument* self, GXmlDomNode* root, gint whatToShow, GXmlDomNodeFilter* filter);
	GXmlDomTreeWalker* (*create_tree_walker) (GXmlDomDocument* self, GXmlDomNode* root, gint what_to_show, GXmlDomNodeFilter* filter);
	GXmlDomImplementation* (*get_implementation) (GXmlDomDocument* self);
	const gchar* (*get_url) (GXmlDomDocument* self);
	const gchar* (*get_document_uri) (GXmlDomDocument* self);
	const gchar* (*get_origin) (GXmlDomDocument* self);
	const gchar* (*get_compat_mode) (GXmlDomDocument* self);
	const gchar* (*get_character_set) (GXmlDomDocument* self);
	const gchar* (*get_content_type) (GXmlDomDocument* self);
	GXmlDomDocumentType* (*get_doctype) (GXmlDomDocument* self);
	GXmlDomElement* (*get_document_element) (GXmlDomDocument* self);
};

struct _GXmlDomNodeIface {
	GTypeInterface parent_iface;
	gboolean (*has_child_nodes) (GXmlDomNode* self);
	void (*normalize) (GXmlDomNode* self);
	gboolean (*is_equal_node) (GXmlDomNode* self, GXmlDomNode* node);
	GXmlDomNodeDocumentPosition (*compare_document_position) (GXmlDomNode* self, GXmlDomNode* other);
	gboolean (*contains) (GXmlDomNode* self, GXmlDomNode* other);
	gchar* (*lookup_prefix) (GXmlDomNode* self, const gchar* nspace);
	gchar* (*lookup_namespace_uri) (GXmlDomNode* self, const gchar* prefix);
	gboolean (*is_default_namespace) (GXmlDomNode* self, const gchar* nspace);
	GXmlDomNode* (*insert_before) (GXmlDomNode* self, GXmlDomNode* node, GXmlDomNode* child, GError** error);
	GXmlDomNode* (*append_child) (GXmlDomNode* self, GXmlDomNode* node, GError** error);
	GXmlDomNode* (*replace_child) (GXmlDomNode* self, GXmlDomNode* node, GXmlDomNode* child, GError** error);
	GXmlDomNode* (*remove_child) (GXmlDomNode* self, GXmlDomNode* child, GError** error);
	GXmlDomNode* (*clone_node) (GXmlDomNode* self, gboolean deep, GError** error);
	GXmlDomNodeNodeType (*get_node_type) (GXmlDomNode* self);
	gchar* (*get_node_name) (GXmlDomNode* self);
	const gchar* (*get_base_uri) (GXmlDomNode* self);
	GXmlDomDocument* (*get_owner_document) (GXmlDomNode* self);
	void (*set_owner_document) (GXmlDomNode* self, GXmlDomDocument* value);
	GXmlDomNode* (*get_parent_node) (GXmlDomNode* self);
	GXmlDomElement* (*get_parent_element) (GXmlDomNode* self);
	GXmlDomNodeList* (*get_child_nodes) (GXmlDomNode* self);
	GXmlDomNode* (*get_first_child) (GXmlDomNode* self);
	GXmlDomNode* (*get_last_child) (GXmlDomNode* self);
	GXmlDomNode* (*get_previous_sibling) (GXmlDomNode* self);
	GXmlDomNode* (*get_next_sibling) (GXmlDomNode* self);
	gchar* (*get_node_value) (GXmlDomNode* self);
	void (*set_node_value) (GXmlDomNode* self, const gchar* value);
	gchar* (*get_text_content) (GXmlDomNode* self);
	void (*set_text_content) (GXmlDomNode* self, const gchar* value);
};

struct _GXmlDomTokenListIface {
	GTypeInterface parent_iface;
	gchar* (*item) (GXmlDomTokenList* self, gint index);
	gboolean (*contains) (GXmlDomTokenList* self, const gchar* token, GError** error);
	void (*add) (GXmlDomTokenList* self, gchar** tokens, int tokens_length1, GError** error);
	void (*remove) (GXmlDomTokenList* self, gchar** tokens, int tokens_length1);
	gboolean (*toggle) (GXmlDomTokenList* self, const gchar* token, gboolean force, gboolean _auto_, GError** error);
	gchar* (*to_string) (GXmlDomTokenList* self);
	gint (*get_length) (GXmlDomTokenList* self);
};

struct _GXmlDomNamedNodeMapIface {
	GTypeInterface parent_iface;
	GXmlDomNode* (*item) (GXmlDomNamedNodeMap* self, gint index);
	GXmlDomNode* (*get_named_item) (GXmlDomNamedNodeMap* self, const gchar* name);
	GXmlDomNode* (*set_named_item) (GXmlDomNamedNodeMap* self, GXmlDomNode* node, GError** error);
	GXmlDomNode* (*remove_named_item) (GXmlDomNamedNodeMap* self, const gchar* name, GError** error);
	GXmlDomNode* (*remove_named_item_ns) (GXmlDomNamedNodeMap* self, const gchar* namespace_uri, const gchar* localName, GError** error);
	GXmlDomNode* (*get_named_item_ns) (GXmlDomNamedNodeMap* self, const gchar* namespace_uri, const gchar* local_name, GError** error);
	GXmlDomNode* (*set_named_item_ns) (GXmlDomNamedNodeMap* self, GXmlDomNode* node, GError** error);
	gint (*get_length) (GXmlDomNamedNodeMap* self);
};

struct _GXmlDomElementIface {
	GTypeInterface parent_iface;
	gchar* (*get_attribute) (GXmlDomElement* self, const gchar* name);
	gchar* (*get_attribute_ns) (GXmlDomElement* self, const gchar* namespace, const gchar* local_name);
	void (*set_attribute) (GXmlDomElement* self, const gchar* name, const gchar* value, GError** error);
	void (*set_attribute_ns) (GXmlDomElement* self, const gchar* namespace, const gchar* name, const gchar* value, GError** error);
	void (*remove_attribute) (GXmlDomElement* self, const gchar* name);
	void (*remove_attribute_ns) (GXmlDomElement* self, const gchar* namespace, const gchar* local_name);
	gboolean (*has_attribute) (GXmlDomElement* self, const gchar* name);
	gboolean (*has_attribute_ns) (GXmlDomElement* self, const gchar* namespace, const gchar* local_name);
	GXmlDomHTMLCollection* (*get_elements_by_tag_name) (GXmlDomElement* self, const gchar* local_name);
	GXmlDomHTMLCollection* (*get_elements_by_tag_name_ns) (GXmlDomElement* self, const gchar* namespace, const gchar* local_name);
	GXmlDomHTMLCollection* (*get_elements_by_class_name) (GXmlDomElement* self, const gchar* class_names);
	gchar* (*get_namespace_uri) (GXmlDomElement* self);
	gchar* (*get_prefix) (GXmlDomElement* self);
	gchar* (*get_local_name) (GXmlDomElement* self);
	gchar* (*get_tag_name) (GXmlDomElement* self);
	gchar* (*get_id) (GXmlDomElement* self);
	void (*set_id) (GXmlDomElement* self, const gchar* value);
	gchar* (*get_class_name) (GXmlDomElement* self);
	void (*set_class_name) (GXmlDomElement* self, const gchar* value);
	GXmlDomTokenList* (*get_class_list) (GXmlDomElement* self);
	GXmlDomNamedNodeMap* (*get_attributes) (GXmlDomElement* self);
};

struct _GXmlDomHtmlDocumentIface {
	GTypeInterface parent_iface;
	void (*read_from_string) (GXmlDomHtmlDocument* self, const gchar* str, GError** error);
	void (*read_from_string_tolerant) (GXmlDomHtmlDocument* self, const gchar* str, GError** error);
	gchar* (*to_html) (GXmlDomHtmlDocument* self, GError** error);
};


static gpointer gxml_css_selector_data_parent_class = NULL;
static gpointer gxml_css_selector_parser_parent_class = NULL;

GQuark gxml_css_selector_error_quark (void);
GType gxml_css_selector_type_get_type (void) G_GNUC_CONST;
GType gxml_css_selector_data_get_type (void) G_GNUC_CONST;
#define GXML_CSS_SELECTOR_DATA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GXML_TYPE_CSS_SELECTOR_DATA, GXmlCssSelectorDataPrivate))
GXmlCssSelectorData* gxml_css_selector_data_new_with_values (GXmlCssSelectorType t, 
                                                             const gchar* data, 
                                                             const gchar* val);
GXmlCssSelectorData* gxml_css_selector_data_construct_with_values (GType object_type, 
                                                                   GXmlCssSelectorType t, 
                                                                   const gchar* data, 
                                                                   const gchar* val);
void gxml_css_selector_data_set_selector_type (GXmlCssSelectorData* self, 
                                               GXmlCssSelectorType value);
void gxml_css_selector_data_set_data (GXmlCssSelectorData* self, 
                                      const gchar* value);
void gxml_css_selector_data_set_value (GXmlCssSelectorData* self, 
                                       const gchar* value);
GXmlCssSelectorData* gxml_css_selector_data_new (void);
GXmlCssSelectorData* gxml_css_selector_data_construct (GType object_type);
GXmlCssSelectorType gxml_css_selector_data_get_selector_type (GXmlCssSelectorData* self);
const gchar* gxml_css_selector_data_get_data (GXmlCssSelectorData* self);
const gchar* gxml_css_selector_data_get_value (GXmlCssSelectorData* self);
static void gxml_css_selector_data_finalize (GObject * obj);
static void _vala_gxml_css_selector_data_get_property (GObject * object, 
                                                guint property_id, 
                                                GValue * value, 
                                                GParamSpec * pspec);
static void _vala_gxml_css_selector_data_set_property (GObject * object, 
                                                guint property_id, 
                                                const GValue * value, 
                                                GParamSpec * pspec);
GType gxml_css_selector_parser_get_type (void) G_GNUC_CONST;
#define GXML_CSS_SELECTOR_PARSER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GXML_TYPE_CSS_SELECTOR_PARSER, GXmlCssSelectorParserPrivate))
static gboolean gxml_css_selector_parser_is_valid_identifier (const gchar* data);
static void gxml_css_selector_parser_parse_class (GXmlCssSelectorParser* self, 
                                           const gchar* css, 
                                           gint* position);
static void gxml_css_selector_parser_parse_id (GXmlCssSelectorParser* self, 
                                        const gchar* css, 
                                        gint* position);
static void gxml_css_selector_parser_parse_all (GXmlCssSelectorParser* self, 
                                         const gchar* css, 
                                         gint* position);
static void gxml_css_selector_parser_parse_element (GXmlCssSelectorParser* self, 
                                             const gchar* css, 
                                             gint* position);
static void gxml_css_selector_parser_parse_attribute (GXmlCssSelectorParser* self, 
                                               const gchar* css, 
                                               gint* position, 
                                               GError** error);
static void gxml_css_selector_parser_parse_pseudo (GXmlCssSelectorParser* self, 
                                            const gchar* css, 
                                            gint* position, 
                                            GError** error);
static gboolean _vala_string_array_contains (gchar* * stack, 
                                      int stack_length, 
                                      gchar* needle);
void gxml_css_selector_parser_parse (GXmlCssSelectorParser* self, 
                                     const gchar* query, 
                                     GError** error);
GeeList* gxml_css_selector_parser_get_selectors (GXmlCssSelectorParser* self);
GType gxml_dom_time_stamp_get_type (void) G_GNUC_CONST;
GType gxml_dom_event_phase_get_type (void) G_GNUC_CONST;
GType gxml_dom_event_get_type (void) G_GNUC_CONST;
GType gxml_dom_event_listener_get_type (void) G_GNUC_CONST;
GType gxml_dom_event_target_get_type (void) G_GNUC_CONST;
GType gxml_dom_node_document_position_get_type (void) G_GNUC_CONST;
GType gxml_dom_node_node_type_get_type (void) G_GNUC_CONST;
GType gxml_dom_node_list_get_type (void) G_GNUC_CONST;
GType gxml_dom_element_list_get_type (void) G_GNUC_CONST;
GType gxml_dom_html_collection_get_type (void) G_GNUC_CONST;
GType gxml_dom_parent_node_get_type (void) G_GNUC_CONST;
GType gxml_dom_non_element_parent_node_get_type (void) G_GNUC_CONST;
GType gxml_dom_document_fragment_get_type (void) G_GNUC_CONST;
GType gxml_dom_non_document_type_child_node_get_type (void) G_GNUC_CONST;
GType gxml_dom_child_node_get_type (void) G_GNUC_CONST;
GType gxml_dom_character_data_get_type (void) G_GNUC_CONST;
GType gxml_dom_text_get_type (void) G_GNUC_CONST;
GType gxml_dom_comment_get_type (void) G_GNUC_CONST;
GType gxml_dom_processing_instruction_get_type (void) G_GNUC_CONST;
GType gxml_dom_range_boundary_points_get_type (void) G_GNUC_CONST;
GType gxml_dom_range_get_type (void) G_GNUC_CONST;
GType gxml_dom_node_filter_get_type (void) G_GNUC_CONST;
GType gxml_dom_node_iterator_get_type (void) G_GNUC_CONST;
GType gxml_dom_tree_walker_get_type (void) G_GNUC_CONST;
GType gxml_dom_document_type_get_type (void) G_GNUC_CONST;
GType gxml_dom_xml_document_get_type (void) G_GNUC_CONST;
GType gxml_element_list_get_type (void) G_GNUC_CONST;
GType gxml_namespace_get_type (void) G_GNUC_CONST;
GType gxml_node_type_get_type (void) G_GNUC_CONST;
GType gxml_node_get_type (void) G_GNUC_CONST;
GType gxml_document_get_type (void) G_GNUC_CONST;
GType gxml_dom_implementation_get_type (void) G_GNUC_CONST;
GType gxml_dom_document_get_type (void) G_GNUC_CONST;
GType gxml_dom_node_get_type (void) G_GNUC_CONST;
GType gxml_dom_token_list_get_type (void) G_GNUC_CONST;
GType gxml_dom_named_node_map_get_type (void) G_GNUC_CONST;
GType gxml_dom_element_get_type (void) G_GNUC_CONST;
gboolean gxml_css_selector_parser_match (GXmlCssSelectorParser* self, 
                                         GXmlDomElement* element, 
                                         GError** error);
gchar* gxml_dom_node_get_node_name (GXmlDomNode* self);
gchar* gxml_dom_element_get_attribute (GXmlDomElement* self, 
                                       const gchar* name);
GType gxml_gdom_token_list_get_type (void) G_GNUC_CONST;
GXmlGDomTokenList* gxml_gdom_token_list_new (GXmlDomElement* e, 
                                             const gchar* attr);
GXmlGDomTokenList* gxml_gdom_token_list_construct (GType object_type, 
                                                   GXmlDomElement* e, 
                                                   const gchar* attr);
gboolean gxml_dom_token_list_contains (GXmlDomTokenList* self, 
                                       const gchar* token, 
                                       GError** error);
GType gxml_gom_node_get_type (void) G_GNUC_CONST;
GType gxml_gom_element_get_type (void) G_GNUC_CONST;
GXmlDomDocument* gxml_dom_node_get_owner_document (GXmlDomNode* self);
GXmlDomElement* gxml_dom_document_get_document_element (GXmlDomDocument* self);
GType gxml_gnode_get_type (void) G_GNUC_CONST;
GType gxml_gchild_node_get_type (void) G_GNUC_CONST;
GType gxml_gnon_document_child_node_get_type (void) G_GNUC_CONST;
GType gxml_gelement_get_type (void) G_GNUC_CONST;
xmlNode* gxml_gnode_get_internal_node (GXmlGNode* self);
GType gxml_dom_html_document_get_type (void) G_GNUC_CONST;
gboolean gxml_dom_node_has_child_nodes (GXmlDomNode* self);
GXmlDomNode* gxml_dom_node_get_parent_node (GXmlDomNode* self);
GXmlDomElement* gxml_dom_parent_node_get_first_element_child (GXmlDomParentNode* self);
GXmlDomElement* gxml_dom_parent_node_get_last_element_child (GXmlDomParentNode* self);
GXmlDomTokenList* gxml_dom_element_get_class_list (GXmlDomElement* self);
GXmlCssSelectorParser* gxml_css_selector_parser_new (void);
GXmlCssSelectorParser* gxml_css_selector_parser_construct (GType object_type);
static GObject * gxml_css_selector_parser_constructor (GType type, 
                                                guint n_construct_properties, 
                                                GObjectConstructParam * construct_properties);
static void gxml_css_selector_parser_finalize (GObject * obj);
static void _vala_gxml_css_selector_parser_get_property (GObject * object, 
                                                  guint property_id, 
                                                  GValue * value, 
                                                  GParamSpec * pspec);
static void _vala_array_destroy (gpointer array, 
                          gint array_length, 
                          GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array, 
                       gint array_length, 
                       GDestroyNotify destroy_func);


GQuark
gxml_css_selector_error_quark (void)
{
	return g_quark_from_static_string ("gxml_css_selector_error-quark");
}


GType
gxml_css_selector_type_get_type (void)
{
	static volatile gsize gxml_css_selector_type_type_id__volatile = 0;
	if (g_once_init_enter (&gxml_css_selector_type_type_id__volatile)) {
		static const GEnumValue values[] = {{GXML_CSS_SELECTOR_TYPE_CLASS, "GXML_CSS_SELECTOR_TYPE_CLASS", "class"}, {GXML_CSS_SELECTOR_TYPE_ID, "GXML_CSS_SELECTOR_TYPE_ID", "id"}, {GXML_CSS_SELECTOR_TYPE_ALL, "GXML_CSS_SELECTOR_TYPE_ALL", "all"}, {GXML_CSS_SELECTOR_TYPE_ELEMENT, "GXML_CSS_SELECTOR_TYPE_ELEMENT", "element"}, {GXML_CSS_SELECTOR_TYPE_ATTRIBUTE, "GXML_CSS_SELECTOR_TYPE_ATTRIBUTE", "attribute"}, {GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_EQUAL, "GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_EQUAL", "attribute-equal"}, {GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_CONTAINS, "GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_CONTAINS", "attribute-contains"}, {GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_SUBSTRING, "GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_SUBSTRING", "attribute-substring"}, {GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH, "GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH", "attribute-start-with"}, {GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH_HYPHEN, "GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH_HYPHEN", "attribute-start-with-hyphen"}, {GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_END_WITH, "GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_END_WITH", "attribute-end-with"}, {GXML_CSS_SELECTOR_TYPE_PSEUDO, "GXML_CSS_SELECTOR_TYPE_PSEUDO", "pseudo"}, {GXML_CSS_SELECTOR_TYPE_AND, "GXML_CSS_SELECTOR_TYPE_AND", "and"}, {GXML_CSS_SELECTOR_TYPE_INSIDE, "GXML_CSS_SELECTOR_TYPE_INSIDE", "inside"}, {GXML_CSS_SELECTOR_TYPE_PARENT, "GXML_CSS_SELECTOR_TYPE_PARENT", "parent"}, {GXML_CSS_SELECTOR_TYPE_AFTER, "GXML_CSS_SELECTOR_TYPE_AFTER", "after"}, {GXML_CSS_SELECTOR_TYPE_BEFORE, "GXML_CSS_SELECTOR_TYPE_BEFORE", "before"}, {0, NULL, NULL}};
		GType gxml_css_selector_type_type_id;
		gxml_css_selector_type_type_id = g_enum_register_static ("GXmlCssSelectorType", values);
		g_once_init_leave (&gxml_css_selector_type_type_id__volatile, gxml_css_selector_type_type_id);
	}
	return gxml_css_selector_type_type_id__volatile;
}


GXmlCssSelectorData*
gxml_css_selector_data_construct_with_values (GType object_type, 
                                              GXmlCssSelectorType t, 
                                              const gchar* data, 
                                              const gchar* val)
{
	GXmlCssSelectorData * self = NULL;
	g_return_val_if_fail (data != NULL, NULL);
	g_return_val_if_fail (val != NULL, NULL);
	self = (GXmlCssSelectorData*) g_object_new (object_type, NULL);
	gxml_css_selector_data_set_selector_type (self, t);
	gxml_css_selector_data_set_data (self, data);
	gxml_css_selector_data_set_value (self, val);
	return self;
}


GXmlCssSelectorData*
gxml_css_selector_data_new_with_values (GXmlCssSelectorType t, 
                                        const gchar* data, 
                                        const gchar* val)
{
	return gxml_css_selector_data_construct_with_values (GXML_TYPE_CSS_SELECTOR_DATA, t, data, val);
}


GXmlCssSelectorData*
gxml_css_selector_data_construct (GType object_type)
{
	GXmlCssSelectorData * self = NULL;
	self = (GXmlCssSelectorData*) g_object_new (object_type, NULL);
	return self;
}


GXmlCssSelectorData*
gxml_css_selector_data_new (void)
{
	return gxml_css_selector_data_construct (GXML_TYPE_CSS_SELECTOR_DATA);
}


GXmlCssSelectorType
gxml_css_selector_data_get_selector_type (GXmlCssSelectorData* self)
{
	GXmlCssSelectorType result;
	GXmlCssSelectorType _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->priv->_selector_type;
	result = _tmp0_;
	return result;
}


void
gxml_css_selector_data_set_selector_type (GXmlCssSelectorData* self, 
                                          GXmlCssSelectorType value)
{
	g_return_if_fail (self != NULL);
	if (gxml_css_selector_data_get_selector_type (self) != value) {
		self->priv->_selector_type = value;
		g_object_notify_by_pspec ((GObject *) self, gxml_css_selector_data_properties[GXML_CSS_SELECTOR_DATA_SELECTOR_TYPE_PROPERTY]);
	}
}


const gchar*
gxml_css_selector_data_get_data (GXmlCssSelectorData* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_data;
	result = _tmp0_;
	return result;
}


void
gxml_css_selector_data_set_data (GXmlCssSelectorData* self, 
                                 const gchar* value)
{
	g_return_if_fail (self != NULL);
	if (g_strcmp0 (value, gxml_css_selector_data_get_data (self)) != 0) {
		gchar* _tmp0_;
		_tmp0_ = g_strdup (value);
		_g_free0 (self->priv->_data);
		self->priv->_data = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, gxml_css_selector_data_properties[GXML_CSS_SELECTOR_DATA_DATA_PROPERTY]);
	}
}


const gchar*
gxml_css_selector_data_get_value (GXmlCssSelectorData* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_value;
	result = _tmp0_;
	return result;
}


void
gxml_css_selector_data_set_value (GXmlCssSelectorData* self, 
                                  const gchar* value)
{
	g_return_if_fail (self != NULL);
	if (g_strcmp0 (value, gxml_css_selector_data_get_value (self)) != 0) {
		gchar* _tmp0_;
		_tmp0_ = g_strdup (value);
		_g_free0 (self->priv->_value);
		self->priv->_value = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, gxml_css_selector_data_properties[GXML_CSS_SELECTOR_DATA_VALUE_PROPERTY]);
	}
}


static void
gxml_css_selector_data_class_init (GXmlCssSelectorDataClass * klass)
{
	gxml_css_selector_data_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (GXmlCssSelectorDataPrivate));
	G_OBJECT_CLASS (klass)->get_property = _vala_gxml_css_selector_data_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_gxml_css_selector_data_set_property;
	G_OBJECT_CLASS (klass)->finalize = gxml_css_selector_data_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_CSS_SELECTOR_DATA_SELECTOR_TYPE_PROPERTY, gxml_css_selector_data_properties[GXML_CSS_SELECTOR_DATA_SELECTOR_TYPE_PROPERTY] = g_param_spec_enum ("selector-type", "selector-type", "selector-type", GXML_TYPE_CSS_SELECTOR_TYPE, GXML_CSS_SELECTOR_TYPE_ALL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_CSS_SELECTOR_DATA_DATA_PROPERTY, gxml_css_selector_data_properties[GXML_CSS_SELECTOR_DATA_DATA_PROPERTY] = g_param_spec_string ("data", "data", "data", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_CSS_SELECTOR_DATA_VALUE_PROPERTY, gxml_css_selector_data_properties[GXML_CSS_SELECTOR_DATA_VALUE_PROPERTY] = g_param_spec_string ("value", "value", "value", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
}


static void
gxml_css_selector_data_instance_init (GXmlCssSelectorData * self)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	self->priv = GXML_CSS_SELECTOR_DATA_GET_PRIVATE (self);
	self->priv->_selector_type = GXML_CSS_SELECTOR_TYPE_ALL;
	_tmp0_ = g_strdup ("");
	self->priv->_data = _tmp0_;
	_tmp1_ = g_strdup ("");
	self->priv->_value = _tmp1_;
}


static void
gxml_css_selector_data_finalize (GObject * obj)
{
	GXmlCssSelectorData * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GXML_TYPE_CSS_SELECTOR_DATA, GXmlCssSelectorData);
	_g_free0 (self->priv->_data);
	_g_free0 (self->priv->_value);
	G_OBJECT_CLASS (gxml_css_selector_data_parent_class)->finalize (obj);
}


GType
gxml_css_selector_data_get_type (void)
{
	static volatile gsize gxml_css_selector_data_type_id__volatile = 0;
	if (g_once_init_enter (&gxml_css_selector_data_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (GXmlCssSelectorDataClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gxml_css_selector_data_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GXmlCssSelectorData), 0, (GInstanceInitFunc) gxml_css_selector_data_instance_init, NULL };
		GType gxml_css_selector_data_type_id;
		gxml_css_selector_data_type_id = g_type_register_static (G_TYPE_OBJECT, "GXmlCssSelectorData", &g_define_type_info, 0);
		g_once_init_leave (&gxml_css_selector_data_type_id__volatile, gxml_css_selector_data_type_id);
	}
	return gxml_css_selector_data_type_id__volatile;
}


static void
_vala_gxml_css_selector_data_get_property (GObject * object, 
                                           guint property_id, 
                                           GValue * value, 
                                           GParamSpec * pspec)
{
	GXmlCssSelectorData * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, GXML_TYPE_CSS_SELECTOR_DATA, GXmlCssSelectorData);
	switch (property_id) {
		case GXML_CSS_SELECTOR_DATA_SELECTOR_TYPE_PROPERTY:
		g_value_set_enum (value, gxml_css_selector_data_get_selector_type (self));
		break;
		case GXML_CSS_SELECTOR_DATA_DATA_PROPERTY:
		g_value_set_string (value, gxml_css_selector_data_get_data (self));
		break;
		case GXML_CSS_SELECTOR_DATA_VALUE_PROPERTY:
		g_value_set_string (value, gxml_css_selector_data_get_value (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


static void
_vala_gxml_css_selector_data_set_property (GObject * object, 
                                           guint property_id, 
                                           const GValue * value, 
                                           GParamSpec * pspec)
{
	GXmlCssSelectorData * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, GXML_TYPE_CSS_SELECTOR_DATA, GXmlCssSelectorData);
	switch (property_id) {
		case GXML_CSS_SELECTOR_DATA_SELECTOR_TYPE_PROPERTY:
		gxml_css_selector_data_set_selector_type (self, g_value_get_enum (value));
		break;
		case GXML_CSS_SELECTOR_DATA_DATA_PROPERTY:
		gxml_css_selector_data_set_data (self, g_value_get_string (value));
		break;
		case GXML_CSS_SELECTOR_DATA_VALUE_PROPERTY:
		gxml_css_selector_data_set_value (self, g_value_get_string (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


static gboolean
string_get_next_char (const gchar* self, 
                      gint* index, 
                      gunichar* c)
{
	gunichar _vala_c = 0U;
	gboolean result = FALSE;
	gunichar _tmp0_;
	g_return_val_if_fail (self != NULL, FALSE);
	_vala_c = g_utf8_get_char (((gchar*) self) + (*index));
	_tmp0_ = _vala_c;
	if (_tmp0_ != ((gunichar) 0)) {
		gchar* _tmp1_;
		_tmp1_ = g_utf8_next_char (((gchar*) self) + (*index));
		*index = (gint) (_tmp1_ - ((gchar*) self));
		result = TRUE;
		if (c) {
			*c = _vala_c;
		}
		return result;
	} else {
		result = FALSE;
		if (c) {
			*c = _vala_c;
		}
		return result;
	}
	if (c) {
		*c = _vala_c;
	}
}


static gboolean
gxml_css_selector_parser_is_valid_identifier (const gchar* data)
{
	gboolean result = FALSE;
	gunichar u = 0U;
	gint index = 0;
	g_return_val_if_fail (data != NULL, FALSE);
	u = (gunichar) 0;
	index = 0;
	while (TRUE) {
		gunichar _tmp0_ = 0U;
		gboolean _tmp1_;
		gboolean _tmp2_ = FALSE;
		gboolean _tmp3_ = FALSE;
		gboolean _tmp4_ = FALSE;
		gboolean _tmp5_ = FALSE;
		gboolean _tmp6_ = FALSE;
		gboolean _tmp7_ = FALSE;
		gboolean _tmp8_ = FALSE;
		gboolean _tmp9_ = FALSE;
		gboolean _tmp10_ = FALSE;
		gboolean _tmp11_ = FALSE;
		gboolean _tmp12_ = FALSE;
		gboolean _tmp13_ = FALSE;
		gboolean _tmp14_ = FALSE;
		gboolean _tmp15_ = FALSE;
		gboolean _tmp16_ = FALSE;
		gboolean _tmp17_ = FALSE;
		gboolean _tmp18_ = FALSE;
		gboolean _tmp19_ = FALSE;
		gboolean _tmp20_ = FALSE;
		gboolean _tmp21_ = FALSE;
		gunichar _tmp22_;
		_tmp1_ = string_get_next_char (data, &index, &_tmp0_);
		u = _tmp0_;
		if (!_tmp1_) {
			break;
		}
		_tmp22_ = u;
		if (_tmp22_ == ((gunichar) '[')) {
			_tmp21_ = TRUE;
		} else {
			gunichar _tmp23_;
			_tmp23_ = u;
			_tmp21_ = _tmp23_ == ((gunichar) ']');
		}
		if (_tmp21_) {
			_tmp20_ = TRUE;
		} else {
			gunichar _tmp24_;
			_tmp24_ = u;
			_tmp20_ = _tmp24_ == ((gunichar) '{');
		}
		if (_tmp20_) {
			_tmp19_ = TRUE;
		} else {
			gunichar _tmp25_;
			_tmp25_ = u;
			_tmp19_ = _tmp25_ == ((gunichar) '}');
		}
		if (_tmp19_) {
			_tmp18_ = TRUE;
		} else {
			gunichar _tmp26_;
			_tmp26_ = u;
			_tmp18_ = _tmp26_ == ((gunichar) '$');
		}
		if (_tmp18_) {
			_tmp17_ = TRUE;
		} else {
			gunichar _tmp27_;
			_tmp27_ = u;
			_tmp17_ = _tmp27_ == ((gunichar) '&');
		}
		if (_tmp17_) {
			_tmp16_ = TRUE;
		} else {
			gunichar _tmp28_;
			_tmp28_ = u;
			_tmp16_ = _tmp28_ == ((gunichar) '#');
		}
		if (_tmp16_) {
			_tmp15_ = TRUE;
		} else {
			gunichar _tmp29_;
			_tmp29_ = u;
			_tmp15_ = _tmp29_ == ((gunichar) '|');
		}
		if (_tmp15_) {
			_tmp14_ = TRUE;
		} else {
			gunichar _tmp30_;
			_tmp30_ = u;
			_tmp14_ = _tmp30_ == ((gunichar) '`');
		}
		if (_tmp14_) {
			_tmp13_ = TRUE;
		} else {
			gunichar _tmp31_;
			_tmp31_ = u;
			_tmp13_ = _tmp31_ == ((gunichar) '^');
		}
		if (_tmp13_) {
			_tmp12_ = TRUE;
		} else {
			gunichar _tmp32_;
			_tmp32_ = u;
			_tmp12_ = _tmp32_ == ((gunichar) '@');
		}
		if (_tmp12_) {
			_tmp11_ = TRUE;
		} else {
			gunichar _tmp33_;
			_tmp33_ = u;
			_tmp11_ = _tmp33_ == ((gunichar) '+');
		}
		if (_tmp11_) {
			_tmp10_ = TRUE;
		} else {
			gunichar _tmp34_;
			_tmp34_ = u;
			_tmp10_ = _tmp34_ == ((gunichar) '~');
		}
		if (_tmp10_) {
			_tmp9_ = TRUE;
		} else {
			gunichar _tmp35_;
			_tmp35_ = u;
			_tmp9_ = _tmp35_ == ((gunichar) '*');
		}
		if (_tmp9_) {
			_tmp8_ = TRUE;
		} else {
			gunichar _tmp36_;
			_tmp36_ = u;
			_tmp8_ = _tmp36_ == ((gunichar) '%');
		}
		if (_tmp8_) {
			_tmp7_ = TRUE;
		} else {
			gunichar _tmp37_;
			_tmp37_ = u;
			_tmp7_ = _tmp37_ == ((gunichar) '!');
		}
		if (_tmp7_) {
			_tmp6_ = TRUE;
		} else {
			gunichar _tmp38_;
			_tmp38_ = u;
			_tmp6_ = _tmp38_ == ((gunichar) '?');
		}
		if (_tmp6_) {
			_tmp5_ = TRUE;
		} else {
			gunichar _tmp39_;
			_tmp39_ = u;
			_tmp5_ = _tmp39_ == ((gunichar) '<');
		}
		if (_tmp5_) {
			_tmp4_ = TRUE;
		} else {
			gunichar _tmp40_;
			_tmp40_ = u;
			_tmp4_ = _tmp40_ == ((gunichar) '>');
		}
		if (_tmp4_) {
			_tmp3_ = TRUE;
		} else {
			gunichar _tmp41_;
			_tmp41_ = u;
			_tmp3_ = _tmp41_ == ((gunichar) '"');
		}
		if (_tmp3_) {
			_tmp2_ = TRUE;
		} else {
			gunichar _tmp42_;
			_tmp42_ = u;
			_tmp2_ = _tmp42_ == ((gunichar) '\'');
		}
		if (_tmp2_) {
			result = FALSE;
			return result;
		}
	}
	result = TRUE;
	return result;
}


static void
gxml_css_selector_parser_parse_class (GXmlCssSelectorParser* self, 
                                      const gchar* css, 
                                      gint* position)
{
	GXmlCssSelectorData* idata = NULL;
	GXmlCssSelectorData* _tmp0_;
	GeeArrayList* _tmp1_;
	GXmlCssSelectorData* _tmp2_;
	gint _tmp3_;
	GString* sb = NULL;
	GString* _tmp4_;
	gunichar u = 0U;
	GXmlCssSelectorData* data = NULL;
	GString* _tmp13_;
	const gchar* _tmp14_;
	GXmlCssSelectorData* _tmp15_;
	GeeArrayList* _tmp16_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (css != NULL);
	_tmp0_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_INSIDE, "", "");
	idata = _tmp0_;
	_tmp1_ = self->priv->list;
	_tmp2_ = idata;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp1_, _tmp2_);
	_tmp3_ = *position;
	*position = _tmp3_ + 1;
	_tmp4_ = g_string_new ("");
	sb = _tmp4_;
	u = (gunichar) 0;
	while (TRUE) {
		gboolean _tmp5_ = FALSE;
		gunichar _tmp6_ = 0U;
		gboolean _tmp7_;
		GString* _tmp11_;
		gunichar _tmp12_;
		_tmp7_ = string_get_next_char (css, position, &_tmp6_);
		u = _tmp6_;
		if (_tmp7_) {
			gboolean _tmp8_ = FALSE;
			gunichar _tmp9_;
			_tmp9_ = u;
			if (g_unichar_isalnum (_tmp9_)) {
				_tmp8_ = TRUE;
			} else {
				gunichar _tmp10_;
				_tmp10_ = u;
				_tmp8_ = _tmp10_ == ((gunichar) '-');
			}
			_tmp5_ = _tmp8_;
		} else {
			_tmp5_ = FALSE;
		}
		if (!_tmp5_) {
			break;
		}
		_tmp11_ = sb;
		_tmp12_ = u;
		g_string_append_unichar (_tmp11_, _tmp12_);
	}
	_tmp13_ = sb;
	_tmp14_ = _tmp13_->str;
	_tmp15_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_CLASS, _tmp14_, "");
	data = _tmp15_;
	_tmp16_ = self->priv->list;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp16_, data);
	_g_object_unref0 (data);
	_g_string_free0 (sb);
	_g_object_unref0 (idata);
}


static void
gxml_css_selector_parser_parse_id (GXmlCssSelectorParser* self, 
                                   const gchar* css, 
                                   gint* position)
{
	GXmlCssSelectorData* idata = NULL;
	GXmlCssSelectorData* _tmp0_;
	GeeArrayList* _tmp1_;
	GXmlCssSelectorData* _tmp2_;
	gint _tmp3_;
	GString* sb = NULL;
	GString* _tmp4_;
	gunichar u = 0U;
	GXmlCssSelectorData* data = NULL;
	GString* _tmp13_;
	const gchar* _tmp14_;
	GXmlCssSelectorData* _tmp15_;
	GeeArrayList* _tmp16_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (css != NULL);
	_tmp0_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_INSIDE, "", "");
	idata = _tmp0_;
	_tmp1_ = self->priv->list;
	_tmp2_ = idata;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp1_, _tmp2_);
	_tmp3_ = *position;
	*position = _tmp3_ + 1;
	_tmp4_ = g_string_new ("");
	sb = _tmp4_;
	u = (gunichar) 0;
	while (TRUE) {
		gboolean _tmp5_ = FALSE;
		gunichar _tmp6_ = 0U;
		gboolean _tmp7_;
		GString* _tmp11_;
		gunichar _tmp12_;
		_tmp7_ = string_get_next_char (css, position, &_tmp6_);
		u = _tmp6_;
		if (_tmp7_) {
			gboolean _tmp8_ = FALSE;
			gunichar _tmp9_;
			_tmp9_ = u;
			if (g_unichar_isalnum (_tmp9_)) {
				_tmp8_ = TRUE;
			} else {
				gunichar _tmp10_;
				_tmp10_ = u;
				_tmp8_ = _tmp10_ == ((gunichar) '-');
			}
			_tmp5_ = _tmp8_;
		} else {
			_tmp5_ = FALSE;
		}
		if (!_tmp5_) {
			break;
		}
		_tmp11_ = sb;
		_tmp12_ = u;
		g_string_append_unichar (_tmp11_, _tmp12_);
	}
	_tmp13_ = sb;
	_tmp14_ = _tmp13_->str;
	_tmp15_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_ID, _tmp14_, "");
	data = _tmp15_;
	_tmp16_ = self->priv->list;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp16_, data);
	_g_object_unref0 (data);
	_g_string_free0 (sb);
	_g_object_unref0 (idata);
}


static void
gxml_css_selector_parser_parse_all (GXmlCssSelectorParser* self, 
                                    const gchar* css, 
                                    gint* position)
{
	gint _tmp0_;
	GXmlCssSelectorData* data = NULL;
	GXmlCssSelectorData* _tmp1_;
	GeeArrayList* _tmp2_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (css != NULL);
	_tmp0_ = *position;
	*position = _tmp0_ + 1;
	_tmp1_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_ALL, "*", "");
	data = _tmp1_;
	_tmp2_ = self->priv->list;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp2_, data);
	_g_object_unref0 (data);
}


static void
gxml_css_selector_parser_parse_element (GXmlCssSelectorParser* self, 
                                        const gchar* css, 
                                        gint* position)
{
	GString* sb = NULL;
	GString* _tmp0_;
	gunichar u = 0U;
	GXmlCssSelectorData* data = NULL;
	GString* _tmp9_;
	const gchar* _tmp10_;
	GXmlCssSelectorData* _tmp11_;
	GeeArrayList* _tmp12_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (css != NULL);
	_tmp0_ = g_string_new ("");
	sb = _tmp0_;
	u = (gunichar) 0;
	while (TRUE) {
		gboolean _tmp1_ = FALSE;
		gunichar _tmp2_ = 0U;
		gboolean _tmp3_;
		GString* _tmp7_;
		gunichar _tmp8_;
		_tmp3_ = string_get_next_char (css, position, &_tmp2_);
		u = _tmp2_;
		if (_tmp3_) {
			gboolean _tmp4_ = FALSE;
			gunichar _tmp5_;
			_tmp5_ = u;
			if (g_unichar_isalnum (_tmp5_)) {
				_tmp4_ = TRUE;
			} else {
				gunichar _tmp6_;
				_tmp6_ = u;
				_tmp4_ = _tmp6_ == ((gunichar) '-');
			}
			_tmp1_ = _tmp4_;
		} else {
			_tmp1_ = FALSE;
		}
		if (!_tmp1_) {
			break;
		}
		_tmp7_ = sb;
		_tmp8_ = u;
		g_string_append_unichar (_tmp7_, _tmp8_);
	}
	_tmp9_ = sb;
	_tmp10_ = _tmp9_->str;
	_tmp11_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_ELEMENT, _tmp10_, "");
	data = _tmp11_;
	_tmp12_ = self->priv->list;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp12_, data);
	_g_object_unref0 (data);
	_g_string_free0 (sb);
}


static gchar*
g_unichar_to_string (gunichar self)
{
	gchar* result = NULL;
	gchar* str = NULL;
	gchar* _tmp0_;
	const gchar* _tmp1_;
	_tmp0_ = g_new0 (gchar, 7);
	str = (gchar*) _tmp0_;
	_tmp1_ = str;
	g_unichar_to_utf8 (self, _tmp1_);
	result = str;
	return result;
}


static gchar*
string_strip (const gchar* self)
{
	gchar* result = NULL;
	gchar* _result_ = NULL;
	gchar* _tmp0_;
	const gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = g_strdup (self);
	_result_ = _tmp0_;
	_tmp1_ = _result_;
	g_strstrip (_tmp1_);
	result = _result_;
	return result;
}


static void
gxml_css_selector_parser_parse_attribute (GXmlCssSelectorParser* self, 
                                          const gchar* css, 
                                          gint* position, 
                                          GError** error)
{
	GXmlCssSelectorData* idata = NULL;
	GXmlCssSelectorData* _tmp0_;
	GeeArrayList* _tmp1_;
	GXmlCssSelectorData* _tmp2_;
	gint _tmp3_;
	GString* sb = NULL;
	GString* _tmp4_;
	gunichar u = 0U;
	gunichar _tmp5_ = 0U;
	gunichar _tmp8_;
	GString* _tmp10_;
	gunichar _tmp11_;
	gunichar _tmp22_;
	gunichar _tmp28_;
	GString* sb1 = NULL;
	GString* _tmp87_;
	GXmlCssSelectorData* data = NULL;
	GString* _tmp88_;
	const gchar* _tmp89_;
	GXmlCssSelectorData* _tmp90_;
	gunichar _tmp91_;
	gunichar _tmp102_ = 0U;
	gunichar _tmp103_;
	gunichar _tmp105_ = 0U;
	gunichar s = 0U;
	gboolean _tmp108_ = FALSE;
	gunichar _tmp109_;
	gboolean _tmp113_ = FALSE;
	gunichar _tmp114_;
	gboolean _tmp130_ = FALSE;
	gunichar _tmp131_;
	gunichar _tmp140_;
	gunichar _tmp147_;
	gunichar _tmp149_;
	GeeArrayList* _tmp158_;
	GXmlCssSelectorData* _tmp159_;
	GError * _inner_error_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (css != NULL);
	_tmp0_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_INSIDE, "", "");
	idata = _tmp0_;
	_tmp1_ = self->priv->list;
	_tmp2_ = idata;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp1_, _tmp2_);
	_tmp3_ = *position;
	*position = _tmp3_ + 1;
	_tmp4_ = g_string_new ("");
	sb = _tmp4_;
	u = (gunichar) 0;
	string_get_next_char (css, position, &_tmp5_);
	u = _tmp5_;
	while (TRUE) {
		gunichar _tmp6_;
		gunichar _tmp7_ = 0U;
		_tmp6_ = u;
		if (!g_unichar_isspace (_tmp6_)) {
			break;
		}
		string_get_next_char (css, position, &_tmp7_);
		u = _tmp7_;
	}
	_tmp8_ = u;
	if (!g_unichar_isalnum (_tmp8_)) {
		GError* _tmp9_;
		_tmp9_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_ATTRIBUTE, _ ("Invalid attribute character"));
		_inner_error_ = _tmp9_;
		g_propagate_error (error, _inner_error_);
		_g_string_free0 (sb);
		_g_object_unref0 (idata);
		return;
	}
	_tmp10_ = sb;
	_tmp11_ = u;
	g_string_append_unichar (_tmp10_, _tmp11_);
	while (TRUE) {
		gboolean _tmp12_ = FALSE;
		gunichar _tmp13_ = 0U;
		gboolean _tmp14_;
		GString* _tmp18_;
		gunichar _tmp19_;
		_tmp14_ = string_get_next_char (css, position, &_tmp13_);
		u = _tmp13_;
		if (_tmp14_) {
			gboolean _tmp15_ = FALSE;
			gunichar _tmp16_;
			_tmp16_ = u;
			if (g_unichar_isalnum (_tmp16_)) {
				_tmp15_ = TRUE;
			} else {
				gunichar _tmp17_;
				_tmp17_ = u;
				_tmp15_ = _tmp17_ == ((gunichar) '-');
			}
			_tmp12_ = _tmp15_;
		} else {
			_tmp12_ = FALSE;
		}
		if (!_tmp12_) {
			break;
		}
		_tmp18_ = sb;
		_tmp19_ = u;
		g_string_append_unichar (_tmp18_, _tmp19_);
	}
	while (TRUE) {
		gunichar _tmp20_;
		gunichar _tmp21_ = 0U;
		_tmp20_ = u;
		if (!g_unichar_isspace (_tmp20_)) {
			break;
		}
		string_get_next_char (css, position, &_tmp21_);
		u = _tmp21_;
	}
	_tmp22_ = u;
	if (_tmp22_ == ((gunichar) ']')) {
		GXmlCssSelectorData* data = NULL;
		GString* _tmp23_;
		const gchar* _tmp24_;
		GXmlCssSelectorData* _tmp25_;
		GeeArrayList* _tmp26_;
		GXmlCssSelectorData* _tmp27_;
		_tmp23_ = sb;
		_tmp24_ = _tmp23_->str;
		_tmp25_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_ATTRIBUTE, _tmp24_, "");
		data = _tmp25_;
		_tmp26_ = self->priv->list;
		_tmp27_ = data;
		gee_abstract_collection_add ((GeeAbstractCollection*) _tmp26_, _tmp27_);
		_g_object_unref0 (data);
		_g_string_free0 (sb);
		_g_object_unref0 (idata);
		return;
	}
	_tmp28_ = u;
	if (_tmp28_ == ((gunichar) '=')) {
		GString* sb1 = NULL;
		GString* _tmp29_;
		gunichar _tmp30_ = 0U;
		gunichar s = 0U;
		gboolean _tmp33_ = FALSE;
		gunichar _tmp34_;
		gboolean _tmp38_ = FALSE;
		gunichar _tmp39_;
		gboolean _tmp55_ = FALSE;
		gunichar _tmp56_;
		gunichar _tmp65_;
		gunichar _tmp72_;
		GXmlCssSelectorData* data = NULL;
		GString* _tmp74_;
		const gchar* _tmp75_;
		GString* _tmp76_;
		const gchar* _tmp77_;
		GXmlCssSelectorData* _tmp78_;
		gunichar _tmp79_;
		GeeArrayList* _tmp85_;
		GXmlCssSelectorData* _tmp86_;
		_tmp29_ = g_string_new ("");
		sb1 = _tmp29_;
		string_get_next_char (css, position, &_tmp30_);
		u = _tmp30_;
		while (TRUE) {
			gunichar _tmp31_;
			gunichar _tmp32_ = 0U;
			_tmp31_ = u;
			if (!g_unichar_isspace (_tmp31_)) {
				break;
			}
			string_get_next_char (css, position, &_tmp32_);
			u = _tmp32_;
		}
		s = (gunichar) 0;
		_tmp34_ = u;
		if (_tmp34_ == ((gunichar) '"')) {
			_tmp33_ = TRUE;
		} else {
			gunichar _tmp35_;
			_tmp35_ = u;
			_tmp33_ = _tmp35_ == ((gunichar) '\'');
		}
		if (_tmp33_) {
			gunichar _tmp36_;
			gunichar _tmp37_ = 0U;
			_tmp36_ = u;
			s = _tmp36_;
			string_get_next_char (css, position, &_tmp37_);
			u = _tmp37_;
		}
		_tmp39_ = s;
		if (_tmp39_ != ((gunichar) 0)) {
			_tmp38_ = TRUE;
		} else {
			gunichar _tmp40_;
			gchar* _tmp41_;
			gchar* _tmp42_;
			_tmp40_ = u;
			_tmp41_ = g_unichar_to_string (_tmp40_);
			_tmp42_ = _tmp41_;
			_tmp38_ = gxml_css_selector_parser_is_valid_identifier (_tmp42_);
			_g_free0 (_tmp42_);
		}
		if (_tmp38_) {
			GString* _tmp43_;
			gunichar _tmp44_;
			_tmp43_ = sb1;
			_tmp44_ = u;
			g_string_append_unichar (_tmp43_, _tmp44_);
		}
		while (TRUE) {
			gboolean _tmp45_ = FALSE;
			gunichar _tmp46_ = 0U;
			gboolean _tmp47_;
			GString* _tmp53_;
			gunichar _tmp54_;
			_tmp47_ = string_get_next_char (css, position, &_tmp46_);
			u = _tmp46_;
			if (_tmp47_) {
				gboolean _tmp48_ = FALSE;
				gunichar _tmp49_;
				_tmp49_ = s;
				if (_tmp49_ != ((gunichar) 0)) {
					gunichar _tmp50_;
					gunichar _tmp51_;
					_tmp50_ = u;
					_tmp51_ = s;
					_tmp48_ = _tmp50_ != _tmp51_;
				} else {
					gunichar _tmp52_;
					_tmp52_ = u;
					_tmp48_ = _tmp52_ != ((gunichar) ']');
				}
				_tmp45_ = _tmp48_;
			} else {
				_tmp45_ = FALSE;
			}
			if (!_tmp45_) {
				break;
			}
			_tmp53_ = sb1;
			_tmp54_ = u;
			g_string_append_unichar (_tmp53_, _tmp54_);
		}
		_tmp56_ = s;
		if (_tmp56_ == ((gunichar) 0)) {
			GString* _tmp57_;
			const gchar* _tmp58_;
			_tmp57_ = sb1;
			_tmp58_ = _tmp57_->str;
			_tmp55_ = !gxml_css_selector_parser_is_valid_identifier (_tmp58_);
		} else {
			_tmp55_ = FALSE;
		}
		if (_tmp55_) {
			GString* _tmp59_;
			const gchar* _tmp60_;
			gchar* _tmp61_;
			gchar* _tmp62_;
			GError* _tmp63_;
			GError* _tmp64_;
			_tmp59_ = sb1;
			_tmp60_ = _tmp59_->str;
			_tmp61_ = g_strdup_printf (_ ("Invalid attribute selector value: %s"), _tmp60_);
			_tmp62_ = _tmp61_;
			_tmp63_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_ATTRIBUTE, _tmp62_);
			_tmp64_ = _tmp63_;
			_g_free0 (_tmp62_);
			_inner_error_ = _tmp64_;
			g_propagate_error (error, _inner_error_);
			_g_string_free0 (sb1);
			_g_string_free0 (sb);
			_g_object_unref0 (idata);
			return;
		}
		_tmp65_ = s;
		if (_tmp65_ != ((gunichar) 0)) {
			gunichar _tmp66_;
			gunichar _tmp67_;
			gunichar _tmp69_ = 0U;
			_tmp66_ = u;
			_tmp67_ = s;
			if (_tmp66_ != _tmp67_) {
				GError* _tmp68_;
				_tmp68_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_STRING, _ ("Invalid end of attribute value"));
				_inner_error_ = _tmp68_;
				g_propagate_error (error, _inner_error_);
				_g_string_free0 (sb1);
				_g_string_free0 (sb);
				_g_object_unref0 (idata);
				return;
			}
			string_get_next_char (css, position, &_tmp69_);
			u = _tmp69_;
		}
		while (TRUE) {
			gunichar _tmp70_;
			gunichar _tmp71_ = 0U;
			_tmp70_ = u;
			if (!g_unichar_isspace (_tmp70_)) {
				break;
			}
			string_get_next_char (css, position, &_tmp71_);
			u = _tmp71_;
		}
		_tmp72_ = u;
		if (_tmp72_ != ((gunichar) ']')) {
			GError* _tmp73_;
			_tmp73_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_ATTRIBUTE, _ ("Invalid end of attribute selector"));
			_inner_error_ = _tmp73_;
			g_propagate_error (error, _inner_error_);
			_g_string_free0 (sb1);
			_g_string_free0 (sb);
			_g_object_unref0 (idata);
			return;
		}
		_tmp74_ = sb;
		_tmp75_ = _tmp74_->str;
		_tmp76_ = sb1;
		_tmp77_ = _tmp76_->str;
		_tmp78_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_EQUAL, _tmp75_, _tmp77_);
		data = _tmp78_;
		_tmp79_ = s;
		if (_tmp79_ == ((gunichar) 0)) {
			GXmlCssSelectorData* _tmp80_;
			GString* _tmp81_;
			const gchar* _tmp82_;
			gchar* _tmp83_;
			gchar* _tmp84_;
			_tmp80_ = data;
			_tmp81_ = sb1;
			_tmp82_ = _tmp81_->str;
			_tmp83_ = string_strip (_tmp82_);
			_tmp84_ = _tmp83_;
			gxml_css_selector_data_set_value (_tmp80_, _tmp84_);
			_g_free0 (_tmp84_);
		}
		_tmp85_ = self->priv->list;
		_tmp86_ = data;
		gee_abstract_collection_add ((GeeAbstractCollection*) _tmp85_, _tmp86_);
		_g_object_unref0 (data);
		_g_string_free0 (sb1);
		_g_string_free0 (sb);
		_g_object_unref0 (idata);
		return;
	}
	_tmp87_ = g_string_new ("");
	sb1 = _tmp87_;
	_tmp88_ = sb;
	_tmp89_ = _tmp88_->str;
	_tmp90_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_ATTRIBUTE, _tmp89_, "");
	data = _tmp90_;
	_tmp91_ = u;
	if (_tmp91_ == ((gunichar) '~')) {
		GXmlCssSelectorData* _tmp92_;
		_tmp92_ = data;
		gxml_css_selector_data_set_selector_type (_tmp92_, GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_CONTAINS);
	} else {
		gunichar _tmp93_;
		_tmp93_ = u;
		if (_tmp93_ == ((gunichar) '*')) {
			GXmlCssSelectorData* _tmp94_;
			_tmp94_ = data;
			gxml_css_selector_data_set_selector_type (_tmp94_, GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_SUBSTRING);
		} else {
			gunichar _tmp95_;
			_tmp95_ = u;
			if (_tmp95_ == ((gunichar) '^')) {
				GXmlCssSelectorData* _tmp96_;
				_tmp96_ = data;
				gxml_css_selector_data_set_selector_type (_tmp96_, GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH);
			} else {
				gunichar _tmp97_;
				_tmp97_ = u;
				if (_tmp97_ == ((gunichar) '|')) {
					GXmlCssSelectorData* _tmp98_;
					_tmp98_ = data;
					gxml_css_selector_data_set_selector_type (_tmp98_, GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH_HYPHEN);
				} else {
					gunichar _tmp99_;
					_tmp99_ = u;
					if (_tmp99_ == ((gunichar) '$')) {
						GXmlCssSelectorData* _tmp100_;
						_tmp100_ = data;
						gxml_css_selector_data_set_selector_type (_tmp100_, GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_END_WITH);
					} else {
						GError* _tmp101_;
						_tmp101_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_ATTRIBUTE, _ ("Invalid attribute selector character"));
						_inner_error_ = _tmp101_;
						g_propagate_error (error, _inner_error_);
						_g_object_unref0 (data);
						_g_string_free0 (sb1);
						_g_string_free0 (sb);
						_g_object_unref0 (idata);
						return;
					}
				}
			}
		}
	}
	string_get_next_char (css, position, &_tmp102_);
	u = _tmp102_;
	_tmp103_ = u;
	if (_tmp103_ != ((gunichar) '=')) {
		GError* _tmp104_;
		_tmp104_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_ATTRIBUTE, _ ("Invalid attribute selector character: can't find '=' character"));
		_inner_error_ = _tmp104_;
		g_propagate_error (error, _inner_error_);
		_g_object_unref0 (data);
		_g_string_free0 (sb1);
		_g_string_free0 (sb);
		_g_object_unref0 (idata);
		return;
	}
	string_get_next_char (css, position, &_tmp105_);
	u = _tmp105_;
	while (TRUE) {
		gunichar _tmp106_;
		gunichar _tmp107_ = 0U;
		_tmp106_ = u;
		if (!g_unichar_isspace (_tmp106_)) {
			break;
		}
		string_get_next_char (css, position, &_tmp107_);
		u = _tmp107_;
	}
	s = (gunichar) 0;
	_tmp109_ = u;
	if (_tmp109_ == ((gunichar) '"')) {
		_tmp108_ = TRUE;
	} else {
		gunichar _tmp110_;
		_tmp110_ = u;
		_tmp108_ = _tmp110_ == ((gunichar) '\'');
	}
	if (_tmp108_) {
		gunichar _tmp111_;
		gunichar _tmp112_ = 0U;
		_tmp111_ = u;
		s = _tmp111_;
		string_get_next_char (css, position, &_tmp112_);
		u = _tmp112_;
	}
	_tmp114_ = s;
	if (_tmp114_ != ((gunichar) 0)) {
		_tmp113_ = TRUE;
	} else {
		gunichar _tmp115_;
		gchar* _tmp116_;
		gchar* _tmp117_;
		_tmp115_ = u;
		_tmp116_ = g_unichar_to_string (_tmp115_);
		_tmp117_ = _tmp116_;
		_tmp113_ = gxml_css_selector_parser_is_valid_identifier (_tmp117_);
		_g_free0 (_tmp117_);
	}
	if (_tmp113_) {
		GString* _tmp118_;
		gunichar _tmp119_;
		_tmp118_ = sb1;
		_tmp119_ = u;
		g_string_append_unichar (_tmp118_, _tmp119_);
	}
	while (TRUE) {
		gboolean _tmp120_ = FALSE;
		gunichar _tmp121_ = 0U;
		gboolean _tmp122_;
		GString* _tmp128_;
		gunichar _tmp129_;
		_tmp122_ = string_get_next_char (css, position, &_tmp121_);
		u = _tmp121_;
		if (_tmp122_) {
			gboolean _tmp123_ = FALSE;
			gunichar _tmp124_;
			_tmp124_ = s;
			if (_tmp124_ != ((gunichar) 0)) {
				gunichar _tmp125_;
				gunichar _tmp126_;
				_tmp125_ = u;
				_tmp126_ = s;
				_tmp123_ = _tmp125_ != _tmp126_;
			} else {
				gunichar _tmp127_;
				_tmp127_ = u;
				_tmp123_ = _tmp127_ != ((gunichar) ']');
			}
			_tmp120_ = _tmp123_;
		} else {
			_tmp120_ = FALSE;
		}
		if (!_tmp120_) {
			break;
		}
		_tmp128_ = sb1;
		_tmp129_ = u;
		g_string_append_unichar (_tmp128_, _tmp129_);
	}
	_tmp131_ = s;
	if (_tmp131_ == ((gunichar) 0)) {
		GString* _tmp132_;
		const gchar* _tmp133_;
		_tmp132_ = sb1;
		_tmp133_ = _tmp132_->str;
		_tmp130_ = !gxml_css_selector_parser_is_valid_identifier (_tmp133_);
	} else {
		_tmp130_ = FALSE;
	}
	if (_tmp130_) {
		GString* _tmp134_;
		const gchar* _tmp135_;
		gchar* _tmp136_;
		gchar* _tmp137_;
		GError* _tmp138_;
		GError* _tmp139_;
		_tmp134_ = sb1;
		_tmp135_ = _tmp134_->str;
		_tmp136_ = g_strdup_printf (_ ("Invalid attribute selector value: %s"), _tmp135_);
		_tmp137_ = _tmp136_;
		_tmp138_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_ATTRIBUTE, _tmp137_);
		_tmp139_ = _tmp138_;
		_g_free0 (_tmp137_);
		_inner_error_ = _tmp139_;
		g_propagate_error (error, _inner_error_);
		_g_object_unref0 (data);
		_g_string_free0 (sb1);
		_g_string_free0 (sb);
		_g_object_unref0 (idata);
		return;
	}
	_tmp140_ = s;
	if (_tmp140_ != ((gunichar) 0)) {
		gunichar _tmp141_;
		gunichar _tmp142_;
		gunichar _tmp144_ = 0U;
		_tmp141_ = u;
		_tmp142_ = s;
		if (_tmp141_ != _tmp142_) {
			GError* _tmp143_;
			_tmp143_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_STRING, _ ("Invalid end of attribute value"));
			_inner_error_ = _tmp143_;
			g_propagate_error (error, _inner_error_);
			_g_object_unref0 (data);
			_g_string_free0 (sb1);
			_g_string_free0 (sb);
			_g_object_unref0 (idata);
			return;
		}
		string_get_next_char (css, position, &_tmp144_);
		u = _tmp144_;
	}
	while (TRUE) {
		gunichar _tmp145_;
		gunichar _tmp146_ = 0U;
		_tmp145_ = u;
		if (!g_unichar_isspace (_tmp145_)) {
			break;
		}
		string_get_next_char (css, position, &_tmp146_);
		u = _tmp146_;
	}
	_tmp147_ = u;
	if (_tmp147_ != ((gunichar) ']')) {
		GError* _tmp148_;
		_tmp148_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_ATTRIBUTE, _ ("Invalid end of attribute selector"));
		_inner_error_ = _tmp148_;
		g_propagate_error (error, _inner_error_);
		_g_object_unref0 (data);
		_g_string_free0 (sb1);
		_g_string_free0 (sb);
		_g_object_unref0 (idata);
		return;
	}
	_tmp149_ = s;
	if (_tmp149_ == ((gunichar) 0)) {
		GXmlCssSelectorData* _tmp150_;
		GString* _tmp151_;
		const gchar* _tmp152_;
		gchar* _tmp153_;
		gchar* _tmp154_;
		_tmp150_ = data;
		_tmp151_ = sb1;
		_tmp152_ = _tmp151_->str;
		_tmp153_ = string_strip (_tmp152_);
		_tmp154_ = _tmp153_;
		gxml_css_selector_data_set_value (_tmp150_, _tmp154_);
		_g_free0 (_tmp154_);
	} else {
		GXmlCssSelectorData* _tmp155_;
		GString* _tmp156_;
		const gchar* _tmp157_;
		_tmp155_ = data;
		_tmp156_ = sb1;
		_tmp157_ = _tmp156_->str;
		gxml_css_selector_data_set_value (_tmp155_, _tmp157_);
	}
	_tmp158_ = self->priv->list;
	_tmp159_ = data;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp158_, _tmp159_);
	_g_object_unref0 (data);
	_g_string_free0 (sb1);
	_g_string_free0 (sb);
	_g_object_unref0 (idata);
}


static gboolean
_vala_string_array_contains (gchar* * stack, 
                             int stack_length, 
                             gchar* needle)
{
	int i;
	for (i = 0; i < stack_length; i++) {
		if (g_strcmp0 (stack[i], needle) == 0) {
			return TRUE;
		}
	}
	return FALSE;
}


static void
gxml_css_selector_parser_parse_pseudo (GXmlCssSelectorParser* self, 
                                       const gchar* css, 
                                       gint* position, 
                                       GError** error)
{
	GXmlCssSelectorData* idata = NULL;
	GXmlCssSelectorData* _tmp0_;
	GeeArrayList* _tmp1_;
	GXmlCssSelectorData* _tmp2_;
	gint _tmp3_;
	GString* sb = NULL;
	GString* _tmp4_;
	gunichar u = 0U;
	gchar** valid_selectors = NULL;
	gchar* _tmp15_;
	gchar* _tmp16_;
	gchar* _tmp17_;
	gchar* _tmp18_;
	gchar* _tmp19_;
	gchar* _tmp20_;
	gchar* _tmp21_;
	gchar* _tmp22_;
	gchar* _tmp23_;
	gchar* _tmp24_;
	gchar* _tmp25_;
	gchar** _tmp26_;
	gint valid_selectors_length1;
	gint _valid_selectors_size_;
	GString* _tmp27_;
	const gchar* _tmp28_;
	gchar** _tmp29_;
	gint _tmp29__length1;
	GXmlCssSelectorData* data = NULL;
	GString* _tmp36_;
	const gchar* _tmp37_;
	GXmlCssSelectorData* _tmp38_;
	GeeArrayList* _tmp39_;
	GError * _inner_error_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (css != NULL);
	_tmp0_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_INSIDE, "", "");
	idata = _tmp0_;
	_tmp1_ = self->priv->list;
	_tmp2_ = idata;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp1_, _tmp2_);
	_tmp3_ = *position;
	*position = _tmp3_ + 1;
	_tmp4_ = g_string_new ("");
	sb = _tmp4_;
	u = (gunichar) 0;
	while (TRUE) {
		gboolean _tmp5_ = FALSE;
		gunichar _tmp6_ = 0U;
		gboolean _tmp7_;
		GString* _tmp13_;
		gunichar _tmp14_;
		_tmp7_ = string_get_next_char (css, position, &_tmp6_);
		u = _tmp6_;
		if (_tmp7_) {
			gboolean _tmp8_ = FALSE;
			gboolean _tmp9_ = FALSE;
			gunichar _tmp10_;
			_tmp10_ = u;
			if (g_unichar_isalnum (_tmp10_)) {
				_tmp9_ = TRUE;
			} else {
				gunichar _tmp11_;
				_tmp11_ = u;
				_tmp9_ = _tmp11_ == ((gunichar) '-');
			}
			if (_tmp9_) {
				_tmp8_ = TRUE;
			} else {
				gunichar _tmp12_;
				_tmp12_ = u;
				_tmp8_ = _tmp12_ == ((gunichar) ':');
			}
			_tmp5_ = _tmp8_;
		} else {
			_tmp5_ = FALSE;
		}
		if (!_tmp5_) {
			break;
		}
		_tmp13_ = sb;
		_tmp14_ = u;
		g_string_append_unichar (_tmp13_, _tmp14_);
	}
	_tmp15_ = g_strdup ("root");
	_tmp16_ = g_strdup ("checked");
	_tmp17_ = g_strdup ("disabled");
	_tmp18_ = g_strdup ("empty");
	_tmp19_ = g_strdup ("enable");
	_tmp20_ = g_strdup ("first-child");
	_tmp21_ = g_strdup (":first-letter");
	_tmp22_ = g_strdup (":first-line");
	_tmp23_ = g_strdup ("first-of-type");
	_tmp24_ = g_strdup ("last-child");
	_tmp25_ = g_strdup ("last-of-type");
	_tmp26_ = g_new0 (gchar*, 11 + 1);
	_tmp26_[0] = _tmp15_;
	_tmp26_[1] = _tmp16_;
	_tmp26_[2] = _tmp17_;
	_tmp26_[3] = _tmp18_;
	_tmp26_[4] = _tmp19_;
	_tmp26_[5] = _tmp20_;
	_tmp26_[6] = _tmp21_;
	_tmp26_[7] = _tmp22_;
	_tmp26_[8] = _tmp23_;
	_tmp26_[9] = _tmp24_;
	_tmp26_[10] = _tmp25_;
	valid_selectors = _tmp26_;
	valid_selectors_length1 = 11;
	_valid_selectors_size_ = valid_selectors_length1;
	_tmp27_ = sb;
	_tmp28_ = _tmp27_->str;
	_tmp29_ = valid_selectors;
	_tmp29__length1 = valid_selectors_length1;
	if (!_vala_string_array_contains (_tmp29_, _tmp29__length1, _tmp28_)) {
		GString* _tmp30_;
		const gchar* _tmp31_;
		gchar* _tmp32_;
		gchar* _tmp33_;
		GError* _tmp34_;
		GError* _tmp35_;
		_tmp30_ = sb;
		_tmp31_ = _tmp30_->str;
		_tmp32_ = g_strdup_printf (_ ("Invalid pseudo class selector %s"), _tmp31_);
		_tmp33_ = _tmp32_;
		_tmp34_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_INVALID, _tmp33_);
		_tmp35_ = _tmp34_;
		_g_free0 (_tmp33_);
		_inner_error_ = _tmp35_;
		g_propagate_error (error, _inner_error_);
		valid_selectors = (_vala_array_free (valid_selectors, valid_selectors_length1, (GDestroyNotify) g_free), NULL);
		_g_string_free0 (sb);
		_g_object_unref0 (idata);
		return;
	}
	_tmp36_ = sb;
	_tmp37_ = _tmp36_->str;
	_tmp38_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_PSEUDO, _tmp37_, "");
	data = _tmp38_;
	_tmp39_ = self->priv->list;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp39_, data);
	_g_object_unref0 (data);
	valid_selectors = (_vala_array_free (valid_selectors, valid_selectors_length1, (GDestroyNotify) g_free), NULL);
	_g_string_free0 (sb);
	_g_object_unref0 (idata);
}


static gunichar
string_get_char (const gchar* self, 
                 glong index)
{
	gunichar result = 0U;
	g_return_val_if_fail (self != NULL, 0U);
	result = g_utf8_get_char (((gchar*) self) + index);
	return result;
}


static gboolean
string_get_prev_char (const gchar* self, 
                      gint* index, 
                      gunichar* c)
{
	gunichar _vala_c = 0U;
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	if (0 < (*index)) {
		gchar* _tmp0_;
		_tmp0_ = g_utf8_prev_char (((gchar*) self) + (*index));
		*index = (gint) (_tmp0_ - ((gchar*) self));
		_vala_c = g_utf8_get_char (((gchar*) self) + (*index));
		result = TRUE;
		if (c) {
			*c = _vala_c;
		}
		return result;
	} else {
		_vala_c = (gunichar) 0;
		result = FALSE;
		if (c) {
			*c = _vala_c;
		}
		return result;
	}
	if (c) {
		*c = _vala_c;
	}
}


static glong
string_strnlen (gchar* str, 
                glong maxlen)
{
	glong result = 0L;
	gchar* end = NULL;
	gchar* _tmp0_;
	gchar* _tmp1_;
	_tmp0_ = memchr (str, 0, (gsize) maxlen);
	end = _tmp0_;
	_tmp1_ = end;
	if (_tmp1_ == NULL) {
		result = maxlen;
		return result;
	} else {
		gchar* _tmp2_;
		_tmp2_ = end;
		result = (glong) (_tmp2_ - str);
		return result;
	}
}


static gchar*
string_substring (const gchar* self, 
                  glong offset, 
                  glong len)
{
	gchar* result = NULL;
	glong string_length = 0L;
	gboolean _tmp0_ = FALSE;
	glong _tmp6_;
	gchar* _tmp7_;
	g_return_val_if_fail (self != NULL, NULL);
	if (offset >= ((glong) 0)) {
		_tmp0_ = len >= ((glong) 0);
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		string_length = string_strnlen ((gchar*) self, offset + len);
	} else {
		gint _tmp1_;
		gint _tmp2_;
		_tmp1_ = strlen (self);
		_tmp2_ = _tmp1_;
		string_length = (glong) _tmp2_;
	}
	if (offset < ((glong) 0)) {
		glong _tmp3_;
		_tmp3_ = string_length;
		offset = _tmp3_ + offset;
		g_return_val_if_fail (offset >= ((glong) 0), NULL);
	} else {
		glong _tmp4_;
		_tmp4_ = string_length;
		g_return_val_if_fail (offset <= _tmp4_, NULL);
	}
	if (len < ((glong) 0)) {
		glong _tmp5_;
		_tmp5_ = string_length;
		len = _tmp5_ - offset;
	}
	_tmp6_ = string_length;
	g_return_val_if_fail ((offset + len) <= _tmp6_, NULL);
	_tmp7_ = g_strndup (((gchar*) self) + offset, (gsize) len);
	result = _tmp7_;
	return result;
}


void
gxml_css_selector_parser_parse (GXmlCssSelectorParser* self, 
                                const gchar* query, 
                                GError** error)
{
	gchar* css = NULL;
	gchar* _tmp0_;
	const gchar* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	gint position = 0;
	gunichar u = 0U;
	GError * _inner_error_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (query != NULL);
	_tmp0_ = string_strip (query);
	css = _tmp0_;
	_tmp1_ = css;
	_tmp2_ = strlen (_tmp1_);
	_tmp3_ = _tmp2_;
	if (_tmp3_ == 0) {
		GError* _tmp4_;
		_tmp4_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_LENGTH, _ ("Invalid string length."));
		_inner_error_ = _tmp4_;
		g_propagate_error (error, _inner_error_);
		_g_free0 (css);
		return;
	}
	position = 0;
	u = (gunichar) 0;
	while (TRUE) {
		gint _tmp5_;
		const gchar* _tmp6_;
		gint _tmp7_;
		gint _tmp8_;
		const gchar* _tmp9_;
		gint _tmp10_;
		gunichar _tmp11_;
		GeeList* _tmp18_;
		GeeList* _tmp19_;
		gint _tmp20_;
		gint _tmp21_;
		gunichar _tmp51_;
		_tmp5_ = position;
		_tmp6_ = css;
		_tmp7_ = strlen (_tmp6_);
		_tmp8_ = _tmp7_;
		if (!(_tmp5_ < _tmp8_)) {
			break;
		}
		_tmp9_ = css;
		_tmp10_ = position;
		u = string_get_char (_tmp9_, (glong) _tmp10_);
		_tmp11_ = u;
		if (g_unichar_isspace (_tmp11_)) {
			const gchar* _tmp12_;
			gunichar _tmp13_ = 0U;
			gint _tmp17_;
			_tmp12_ = css;
			string_get_next_char (_tmp12_, &position, &_tmp13_);
			u = _tmp13_;
			while (TRUE) {
				gunichar _tmp14_;
				const gchar* _tmp15_;
				gunichar _tmp16_ = 0U;
				_tmp14_ = u;
				if (!g_unichar_isspace (_tmp14_)) {
					break;
				}
				_tmp15_ = css;
				string_get_next_char (_tmp15_, &position, &_tmp16_);
				u = _tmp16_;
			}
			_tmp17_ = position;
			position = _tmp17_ - 1;
		}
		_tmp18_ = gxml_css_selector_parser_get_selectors (self);
		_tmp19_ = _tmp18_;
		_tmp20_ = gee_collection_get_size ((GeeCollection*) _tmp19_);
		_tmp21_ = _tmp20_;
		if (_tmp21_ > 0) {
			GXmlCssSelectorData* ps = NULL;
			GeeList* _tmp22_;
			GeeList* _tmp23_;
			GeeList* _tmp24_;
			GeeList* _tmp25_;
			gint _tmp26_;
			gint _tmp27_;
			gpointer _tmp28_;
			GXmlCssSelectorData* _tmp29_;
			_tmp22_ = gxml_css_selector_parser_get_selectors (self);
			_tmp23_ = _tmp22_;
			_tmp24_ = gxml_css_selector_parser_get_selectors (self);
			_tmp25_ = _tmp24_;
			_tmp26_ = gee_collection_get_size ((GeeCollection*) _tmp25_);
			_tmp27_ = _tmp26_;
			_tmp28_ = gee_list_get (_tmp23_, _tmp27_ - 1);
			ps = (GXmlCssSelectorData*) _tmp28_;
			_tmp29_ = ps;
			if (_tmp29_ != NULL) {
				GXmlCssSelectorData* _tmp30_;
				GXmlCssSelectorType _tmp31_;
				GXmlCssSelectorType _tmp32_;
				_tmp30_ = ps;
				_tmp31_ = gxml_css_selector_data_get_selector_type (_tmp30_);
				_tmp32_ = _tmp31_;
				if (_tmp32_ == GXML_CSS_SELECTOR_TYPE_ELEMENT) {
					const gchar* _tmp33_;
					gunichar _tmp34_ = 0U;
					gunichar _tmp35_;
					_tmp33_ = css;
					string_get_prev_char (_tmp33_, &position, &_tmp34_);
					u = _tmp34_;
					_tmp35_ = u;
					if (_tmp35_ == ((gunichar) '.')) {
						const gchar* _tmp36_;
						_tmp36_ = css;
						gxml_css_selector_parser_parse_class (self, _tmp36_, &position);
						_g_object_unref0 (ps);
						continue;
					} else {
						gunichar _tmp37_;
						_tmp37_ = u;
						if (_tmp37_ == ((gunichar) '#')) {
							const gchar* _tmp38_;
							_tmp38_ = css;
							gxml_css_selector_parser_parse_id (self, _tmp38_, &position);
							_g_object_unref0 (ps);
							continue;
						} else {
							gunichar _tmp39_;
							_tmp39_ = u;
							if (_tmp39_ == ((gunichar) '[')) {
								const gchar* _tmp40_;
								_tmp40_ = css;
								gxml_css_selector_parser_parse_attribute (self, _tmp40_, &position, &_inner_error_);
								if (G_UNLIKELY (_inner_error_ != NULL)) {
									g_propagate_error (error, _inner_error_);
									_g_object_unref0 (ps);
									_g_free0 (css);
									return;
								}
								_g_object_unref0 (ps);
								continue;
							} else {
								gunichar _tmp41_;
								_tmp41_ = u;
								if (_tmp41_ == ((gunichar) ':')) {
									const gchar* _tmp42_;
									_tmp42_ = css;
									gxml_css_selector_parser_parse_pseudo (self, _tmp42_, &position, &_inner_error_);
									if (G_UNLIKELY (_inner_error_ != NULL)) {
										g_propagate_error (error, _inner_error_);
										_g_object_unref0 (ps);
										_g_free0 (css);
										return;
									}
									_g_object_unref0 (ps);
									continue;
								} else {
									const gchar* _tmp43_;
									gint _tmp44_;
									gchar* _tmp45_;
									gchar* _tmp46_;
									gchar* _tmp47_;
									gchar* _tmp48_;
									GError* _tmp49_;
									GError* _tmp50_;
									_tmp43_ = css;
									_tmp44_ = position;
									_tmp45_ = string_substring (_tmp43_, (glong) _tmp44_, (glong) 1);
									_tmp46_ = _tmp45_;
									_tmp47_ = g_strdup_printf (_ ("Invalid '%s' character."), _tmp46_);
									_tmp48_ = _tmp47_;
									_tmp49_ = g_error_new_literal (GXML_CSS_SELECTOR_ERROR, GXML_CSS_SELECTOR_ERROR_TYPE, _tmp48_);
									_tmp50_ = _tmp49_;
									_g_free0 (_tmp48_);
									_g_free0 (_tmp46_);
									_inner_error_ = _tmp50_;
									g_propagate_error (error, _inner_error_);
									_g_object_unref0 (ps);
									_g_free0 (css);
									return;
								}
							}
						}
					}
				}
			}
			_g_object_unref0 (ps);
		}
		_tmp51_ = u;
		if (_tmp51_ == ((gunichar) '*')) {
			const gchar* _tmp52_;
			_tmp52_ = css;
			gxml_css_selector_parser_parse_all (self, _tmp52_, &position);
		} else {
			gunichar _tmp53_;
			_tmp53_ = u;
			if (_tmp53_ == ((gunichar) '.')) {
				const gchar* _tmp54_;
				_tmp54_ = css;
				gxml_css_selector_parser_parse_class (self, _tmp54_, &position);
				continue;
			} else {
				gunichar _tmp55_;
				_tmp55_ = u;
				if (g_unichar_isalnum (_tmp55_)) {
					const gchar* _tmp56_;
					_tmp56_ = css;
					gxml_css_selector_parser_parse_element (self, _tmp56_, &position);
				} else {
					gunichar _tmp57_;
					_tmp57_ = u;
					if (_tmp57_ == ((gunichar) ',')) {
						gint _tmp58_;
						GXmlCssSelectorData* data = NULL;
						GXmlCssSelectorData* _tmp59_;
						GeeArrayList* _tmp60_;
						GXmlCssSelectorData* _tmp61_;
						_tmp58_ = position;
						position = _tmp58_ + 1;
						_tmp59_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_AND, ",", "");
						data = _tmp59_;
						_tmp60_ = self->priv->list;
						_tmp61_ = data;
						gee_abstract_collection_add ((GeeAbstractCollection*) _tmp60_, _tmp61_);
						_g_object_unref0 (data);
					} else {
						gunichar _tmp62_;
						_tmp62_ = u;
						if (_tmp62_ == ((gunichar) '+')) {
							gint _tmp63_;
							GXmlCssSelectorData* data = NULL;
							GXmlCssSelectorData* _tmp64_;
							GeeArrayList* _tmp65_;
							GXmlCssSelectorData* _tmp66_;
							_tmp63_ = position;
							position = _tmp63_ + 1;
							_tmp64_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_AFTER, "+", "");
							data = _tmp64_;
							_tmp65_ = self->priv->list;
							_tmp66_ = data;
							gee_abstract_collection_add ((GeeAbstractCollection*) _tmp65_, _tmp66_);
							_g_object_unref0 (data);
						} else {
							gunichar _tmp67_;
							_tmp67_ = u;
							if (_tmp67_ == ((gunichar) '~')) {
								gint _tmp68_;
								GXmlCssSelectorData* data = NULL;
								GXmlCssSelectorData* _tmp69_;
								GeeArrayList* _tmp70_;
								GXmlCssSelectorData* _tmp71_;
								_tmp68_ = position;
								position = _tmp68_ + 1;
								_tmp69_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_BEFORE, "~", "");
								data = _tmp69_;
								_tmp70_ = self->priv->list;
								_tmp71_ = data;
								gee_abstract_collection_add ((GeeAbstractCollection*) _tmp70_, _tmp71_);
								_g_object_unref0 (data);
							} else {
								gunichar _tmp72_;
								_tmp72_ = u;
								if (_tmp72_ == ((gunichar) '>')) {
									gint _tmp73_;
									GXmlCssSelectorData* data = NULL;
									GXmlCssSelectorData* _tmp74_;
									GeeArrayList* _tmp75_;
									GXmlCssSelectorData* _tmp76_;
									_tmp73_ = position;
									position = _tmp73_ + 1;
									_tmp74_ = gxml_css_selector_data_new_with_values (GXML_CSS_SELECTOR_TYPE_PARENT, ">", "");
									data = _tmp74_;
									_tmp75_ = self->priv->list;
									_tmp76_ = data;
									gee_abstract_collection_add ((GeeAbstractCollection*) _tmp75_, _tmp76_);
									_g_object_unref0 (data);
								}
							}
						}
					}
				}
			}
		}
	}
	_g_free0 (css);
}


gboolean
gxml_css_selector_parser_match (GXmlCssSelectorParser* self, 
                                GXmlDomElement* element, 
                                GError** error)
{
	gboolean result = FALSE;
	gboolean is_element = FALSE;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (element != NULL, FALSE);
	is_element = FALSE;
	{
		gint i = 0;
		i = 0;
		{
			gboolean _tmp0_ = FALSE;
			_tmp0_ = TRUE;
			while (TRUE) {
				gint _tmp2_;
				GeeList* _tmp3_;
				GeeList* _tmp4_;
				gint _tmp5_;
				gint _tmp6_;
				GXmlCssSelectorData* s = NULL;
				GeeList* _tmp7_;
				GeeList* _tmp8_;
				gint _tmp9_;
				gpointer _tmp10_;
				GXmlCssSelectorData* _tmp11_;
				GXmlCssSelectorType _tmp12_;
				GXmlCssSelectorType _tmp13_;
				GXmlCssSelectorData* _tmp14_;
				GXmlCssSelectorType _tmp15_;
				GXmlCssSelectorType _tmp16_;
				GXmlCssSelectorData* _tmp17_;
				GXmlCssSelectorType _tmp18_;
				GXmlCssSelectorType _tmp19_;
				gboolean _tmp36_ = FALSE;
				gboolean _tmp37_;
				gboolean _tmp46_ = FALSE;
				gboolean _tmp47_;
				gboolean _tmp60_ = FALSE;
				gboolean _tmp61_;
				gboolean _tmp80_ = FALSE;
				gboolean _tmp81_;
				gboolean _tmp94_ = FALSE;
				gboolean _tmp95_;
				gboolean _tmp108_ = FALSE;
				gboolean _tmp109_;
				gboolean _tmp125_ = FALSE;
				gboolean _tmp126_;
				GXmlCssSelectorData* _tmp263_;
				GXmlCssSelectorType _tmp264_;
				GXmlCssSelectorType _tmp265_;
				if (!_tmp0_) {
					gint _tmp1_;
					_tmp1_ = i;
					i = _tmp1_ + 1;
				}
				_tmp0_ = FALSE;
				_tmp2_ = i;
				_tmp3_ = gxml_css_selector_parser_get_selectors (self);
				_tmp4_ = _tmp3_;
				_tmp5_ = gee_collection_get_size ((GeeCollection*) _tmp4_);
				_tmp6_ = _tmp5_;
				if (!(_tmp2_ < _tmp6_)) {
					break;
				}
				_tmp7_ = gxml_css_selector_parser_get_selectors (self);
				_tmp8_ = _tmp7_;
				_tmp9_ = i;
				_tmp10_ = gee_list_get (_tmp8_, _tmp9_);
				s = (GXmlCssSelectorData*) _tmp10_;
				_tmp11_ = s;
				_tmp12_ = gxml_css_selector_data_get_selector_type (_tmp11_);
				_tmp13_ = _tmp12_;
				if (_tmp13_ == GXML_CSS_SELECTOR_TYPE_ALL) {
					result = TRUE;
					_g_object_unref0 (s);
					return result;
				}
				_tmp14_ = s;
				_tmp15_ = gxml_css_selector_data_get_selector_type (_tmp14_);
				_tmp16_ = _tmp15_;
				if (_tmp16_ == GXML_CSS_SELECTOR_TYPE_INSIDE) {
					_g_object_unref0 (s);
					continue;
				}
				_tmp17_ = s;
				_tmp18_ = gxml_css_selector_data_get_selector_type (_tmp17_);
				_tmp19_ = _tmp18_;
				if (_tmp19_ == GXML_CSS_SELECTOR_TYPE_ELEMENT) {
					gchar* _tmp20_;
					gchar* _tmp21_;
					gchar* _tmp22_;
					gchar* _tmp23_;
					gchar* _tmp24_;
					GXmlCssSelectorData* _tmp25_;
					const gchar* _tmp26_;
					const gchar* _tmp27_;
					gchar* _tmp28_;
					gchar* _tmp29_;
					gboolean _tmp30_;
					gint _tmp31_;
					GeeList* _tmp32_;
					GeeList* _tmp33_;
					gint _tmp34_;
					gint _tmp35_;
					_tmp20_ = gxml_dom_node_get_node_name ((GXmlDomNode*) element);
					_tmp21_ = _tmp20_;
					_tmp22_ = _tmp21_;
					_tmp23_ = g_utf8_strdown (_tmp22_, (gssize) -1);
					_tmp24_ = _tmp23_;
					_tmp25_ = s;
					_tmp26_ = gxml_css_selector_data_get_data (_tmp25_);
					_tmp27_ = _tmp26_;
					_tmp28_ = g_utf8_strdown (_tmp27_, (gssize) -1);
					_tmp29_ = _tmp28_;
					_tmp30_ = g_strcmp0 (_tmp24_, _tmp29_) != 0;
					_g_free0 (_tmp29_);
					_g_free0 (_tmp24_);
					_g_free0 (_tmp22_);
					if (_tmp30_) {
						result = FALSE;
						_g_object_unref0 (s);
						return result;
					}
					is_element = TRUE;
					_tmp31_ = i;
					_tmp32_ = gxml_css_selector_parser_get_selectors (self);
					_tmp33_ = _tmp32_;
					_tmp34_ = gee_collection_get_size ((GeeCollection*) _tmp33_);
					_tmp35_ = _tmp34_;
					if ((_tmp31_ + 1) >= _tmp35_) {
						result = TRUE;
						_g_object_unref0 (s);
						return result;
					}
					_g_object_unref0 (s);
					continue;
				}
				_tmp37_ = is_element;
				if (_tmp37_) {
					GXmlCssSelectorData* _tmp38_;
					GXmlCssSelectorType _tmp39_;
					GXmlCssSelectorType _tmp40_;
					_tmp38_ = s;
					_tmp39_ = gxml_css_selector_data_get_selector_type (_tmp38_);
					_tmp40_ = _tmp39_;
					_tmp36_ = _tmp40_ == GXML_CSS_SELECTOR_TYPE_ATTRIBUTE;
				} else {
					_tmp36_ = FALSE;
				}
				if (_tmp36_) {
					gchar* p = NULL;
					GXmlCssSelectorData* _tmp41_;
					const gchar* _tmp42_;
					const gchar* _tmp43_;
					gchar* _tmp44_;
					const gchar* _tmp45_;
					_tmp41_ = s;
					_tmp42_ = gxml_css_selector_data_get_data (_tmp41_);
					_tmp43_ = _tmp42_;
					_tmp44_ = gxml_dom_element_get_attribute (element, _tmp43_);
					p = _tmp44_;
					_tmp45_ = p;
					if (_tmp45_ != NULL) {
						result = TRUE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_g_free0 (p);
				}
				_tmp47_ = is_element;
				if (_tmp47_) {
					GXmlCssSelectorData* _tmp48_;
					GXmlCssSelectorType _tmp49_;
					GXmlCssSelectorType _tmp50_;
					_tmp48_ = s;
					_tmp49_ = gxml_css_selector_data_get_selector_type (_tmp48_);
					_tmp50_ = _tmp49_;
					_tmp46_ = _tmp50_ == GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_EQUAL;
				} else {
					_tmp46_ = FALSE;
				}
				if (_tmp46_) {
					gchar* p = NULL;
					GXmlCssSelectorData* _tmp51_;
					const gchar* _tmp52_;
					const gchar* _tmp53_;
					gchar* _tmp54_;
					const gchar* _tmp55_;
					const gchar* _tmp56_;
					GXmlCssSelectorData* _tmp57_;
					const gchar* _tmp58_;
					const gchar* _tmp59_;
					_tmp51_ = s;
					_tmp52_ = gxml_css_selector_data_get_data (_tmp51_);
					_tmp53_ = _tmp52_;
					_tmp54_ = gxml_dom_element_get_attribute (element, _tmp53_);
					p = _tmp54_;
					_tmp55_ = p;
					if (_tmp55_ == NULL) {
						result = FALSE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_tmp56_ = p;
					_tmp57_ = s;
					_tmp58_ = gxml_css_selector_data_get_value (_tmp57_);
					_tmp59_ = _tmp58_;
					if (g_strcmp0 (_tmp56_, _tmp59_) == 0) {
						result = TRUE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_g_free0 (p);
				}
				_tmp61_ = is_element;
				if (_tmp61_) {
					GXmlCssSelectorData* _tmp62_;
					GXmlCssSelectorType _tmp63_;
					GXmlCssSelectorType _tmp64_;
					_tmp62_ = s;
					_tmp63_ = gxml_css_selector_data_get_selector_type (_tmp62_);
					_tmp64_ = _tmp63_;
					_tmp60_ = _tmp64_ == GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_CONTAINS;
				} else {
					_tmp60_ = FALSE;
				}
				if (_tmp60_) {
					gchar* p = NULL;
					GXmlCssSelectorData* _tmp65_;
					const gchar* _tmp66_;
					const gchar* _tmp67_;
					gchar* _tmp68_;
					const gchar* _tmp69_;
					GXmlGDomTokenList* tl = NULL;
					GXmlCssSelectorData* _tmp70_;
					const gchar* _tmp71_;
					const gchar* _tmp72_;
					GXmlGDomTokenList* _tmp73_;
					gboolean _tmp74_ = FALSE;
					GXmlGDomTokenList* _tmp75_;
					GXmlCssSelectorData* _tmp76_;
					const gchar* _tmp77_;
					const gchar* _tmp78_;
					_tmp65_ = s;
					_tmp66_ = gxml_css_selector_data_get_data (_tmp65_);
					_tmp67_ = _tmp66_;
					_tmp68_ = gxml_dom_element_get_attribute (element, _tmp67_);
					p = _tmp68_;
					_tmp69_ = p;
					if (_tmp69_ == NULL) {
						result = FALSE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_tmp70_ = s;
					_tmp71_ = gxml_css_selector_data_get_data (_tmp70_);
					_tmp72_ = _tmp71_;
					_tmp73_ = gxml_gdom_token_list_new (element, _tmp72_);
					tl = _tmp73_;
					_tmp75_ = tl;
					_tmp76_ = s;
					_tmp77_ = gxml_css_selector_data_get_value (_tmp76_);
					_tmp78_ = _tmp77_;
					_tmp74_ = gxml_dom_token_list_contains ((GXmlDomTokenList*) _tmp75_, _tmp78_, &_inner_error_);
					if (G_UNLIKELY (_inner_error_ != NULL)) {
						gboolean _tmp79_ = FALSE;
						g_propagate_error (error, _inner_error_);
						_g_object_unref0 (tl);
						_g_free0 (p);
						_g_object_unref0 (s);
						return _tmp79_;
					}
					if (_tmp74_) {
						result = TRUE;
						_g_object_unref0 (tl);
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_g_object_unref0 (tl);
					_g_free0 (p);
				}
				_tmp81_ = is_element;
				if (_tmp81_) {
					GXmlCssSelectorData* _tmp82_;
					GXmlCssSelectorType _tmp83_;
					GXmlCssSelectorType _tmp84_;
					_tmp82_ = s;
					_tmp83_ = gxml_css_selector_data_get_selector_type (_tmp82_);
					_tmp84_ = _tmp83_;
					_tmp80_ = _tmp84_ == GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH;
				} else {
					_tmp80_ = FALSE;
				}
				if (_tmp80_) {
					gchar* p = NULL;
					GXmlCssSelectorData* _tmp85_;
					const gchar* _tmp86_;
					const gchar* _tmp87_;
					gchar* _tmp88_;
					const gchar* _tmp89_;
					const gchar* _tmp90_;
					GXmlCssSelectorData* _tmp91_;
					const gchar* _tmp92_;
					const gchar* _tmp93_;
					_tmp85_ = s;
					_tmp86_ = gxml_css_selector_data_get_data (_tmp85_);
					_tmp87_ = _tmp86_;
					_tmp88_ = gxml_dom_element_get_attribute (element, _tmp87_);
					p = _tmp88_;
					_tmp89_ = p;
					if (_tmp89_ == NULL) {
						result = FALSE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_tmp90_ = p;
					_tmp91_ = s;
					_tmp92_ = gxml_css_selector_data_get_value (_tmp91_);
					_tmp93_ = _tmp92_;
					if (g_str_has_prefix (_tmp90_, _tmp93_)) {
						result = TRUE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_g_free0 (p);
				}
				_tmp95_ = is_element;
				if (_tmp95_) {
					GXmlCssSelectorData* _tmp96_;
					GXmlCssSelectorType _tmp97_;
					GXmlCssSelectorType _tmp98_;
					_tmp96_ = s;
					_tmp97_ = gxml_css_selector_data_get_selector_type (_tmp96_);
					_tmp98_ = _tmp97_;
					_tmp94_ = _tmp98_ == GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_END_WITH;
				} else {
					_tmp94_ = FALSE;
				}
				if (_tmp94_) {
					gchar* p = NULL;
					GXmlCssSelectorData* _tmp99_;
					const gchar* _tmp100_;
					const gchar* _tmp101_;
					gchar* _tmp102_;
					const gchar* _tmp103_;
					const gchar* _tmp104_;
					GXmlCssSelectorData* _tmp105_;
					const gchar* _tmp106_;
					const gchar* _tmp107_;
					_tmp99_ = s;
					_tmp100_ = gxml_css_selector_data_get_data (_tmp99_);
					_tmp101_ = _tmp100_;
					_tmp102_ = gxml_dom_element_get_attribute (element, _tmp101_);
					p = _tmp102_;
					_tmp103_ = p;
					if (_tmp103_ == NULL) {
						result = FALSE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_tmp104_ = p;
					_tmp105_ = s;
					_tmp106_ = gxml_css_selector_data_get_value (_tmp105_);
					_tmp107_ = _tmp106_;
					if (g_str_has_suffix (_tmp104_, _tmp107_)) {
						result = TRUE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_g_free0 (p);
				}
				_tmp109_ = is_element;
				if (_tmp109_) {
					GXmlCssSelectorData* _tmp110_;
					GXmlCssSelectorType _tmp111_;
					GXmlCssSelectorType _tmp112_;
					_tmp110_ = s;
					_tmp111_ = gxml_css_selector_data_get_selector_type (_tmp110_);
					_tmp112_ = _tmp111_;
					_tmp108_ = _tmp112_ == GXML_CSS_SELECTOR_TYPE_ATTRIBUTE_START_WITH_HYPHEN;
				} else {
					_tmp108_ = FALSE;
				}
				if (_tmp108_) {
					gchar* p = NULL;
					GXmlCssSelectorData* _tmp113_;
					const gchar* _tmp114_;
					const gchar* _tmp115_;
					gchar* _tmp116_;
					const gchar* _tmp117_;
					const gchar* _tmp118_;
					GXmlCssSelectorData* _tmp119_;
					const gchar* _tmp120_;
					const gchar* _tmp121_;
					gchar* _tmp122_;
					gchar* _tmp123_;
					gboolean _tmp124_;
					_tmp113_ = s;
					_tmp114_ = gxml_css_selector_data_get_data (_tmp113_);
					_tmp115_ = _tmp114_;
					_tmp116_ = gxml_dom_element_get_attribute (element, _tmp115_);
					p = _tmp116_;
					_tmp117_ = p;
					if (_tmp117_ == NULL) {
						result = FALSE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_tmp118_ = p;
					_tmp119_ = s;
					_tmp120_ = gxml_css_selector_data_get_value (_tmp119_);
					_tmp121_ = _tmp120_;
					_tmp122_ = g_strconcat (_tmp121_, "-", NULL);
					_tmp123_ = _tmp122_;
					_tmp124_ = g_str_has_suffix (_tmp118_, _tmp123_);
					_g_free0 (_tmp123_);
					if (_tmp124_) {
						result = TRUE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_g_free0 (p);
				}
				_tmp126_ = is_element;
				if (_tmp126_) {
					GXmlCssSelectorData* _tmp127_;
					GXmlCssSelectorType _tmp128_;
					GXmlCssSelectorType _tmp129_;
					_tmp127_ = s;
					_tmp128_ = gxml_css_selector_data_get_selector_type (_tmp127_);
					_tmp129_ = _tmp128_;
					_tmp125_ = _tmp129_ == GXML_CSS_SELECTOR_TYPE_PSEUDO;
				} else {
					_tmp125_ = FALSE;
				}
				if (_tmp125_) {
					GXmlCssSelectorData* _tmp130_;
					const gchar* _tmp131_;
					const gchar* _tmp132_;
					gchar* _tmp133_;
					gchar* _tmp134_;
					gboolean _tmp135_;
					GXmlCssSelectorData* _tmp167_;
					const gchar* _tmp168_;
					const gchar* _tmp169_;
					gchar* _tmp170_;
					gchar* _tmp171_;
					gboolean _tmp172_;
					GXmlCssSelectorData* _tmp175_;
					const gchar* _tmp176_;
					const gchar* _tmp177_;
					gchar* _tmp178_;
					gchar* _tmp179_;
					gboolean _tmp180_;
					GXmlCssSelectorData* _tmp183_;
					const gchar* _tmp184_;
					const gchar* _tmp185_;
					gchar* _tmp186_;
					gchar* _tmp187_;
					gboolean _tmp188_;
					GXmlCssSelectorData* _tmp191_;
					const gchar* _tmp192_;
					const gchar* _tmp193_;
					gchar* _tmp194_;
					gchar* _tmp195_;
					gboolean _tmp196_;
					GXmlCssSelectorData* _tmp197_;
					const gchar* _tmp198_;
					const gchar* _tmp199_;
					gchar* _tmp200_;
					gchar* _tmp201_;
					gboolean _tmp202_;
					GXmlCssSelectorData* _tmp230_;
					const gchar* _tmp231_;
					const gchar* _tmp232_;
					gchar* _tmp233_;
					gchar* _tmp234_;
					gboolean _tmp235_;
					_tmp130_ = s;
					_tmp131_ = gxml_css_selector_data_get_data (_tmp130_);
					_tmp132_ = _tmp131_;
					_tmp133_ = g_utf8_strdown (_tmp132_, (gssize) -1);
					_tmp134_ = _tmp133_;
					_tmp135_ = g_strcmp0 (_tmp134_, "root") == 0;
					_g_free0 (_tmp134_);
					if (_tmp135_) {
						gchar* _tmp151_;
						gchar* _tmp152_;
						gchar* _tmp153_;
						gchar* _tmp154_;
						gchar* _tmp155_;
						GXmlDomDocument* _tmp156_;
						GXmlDomDocument* _tmp157_;
						GXmlDomElement* _tmp158_;
						GXmlDomElement* _tmp159_;
						GXmlDomElement* _tmp160_;
						gchar* _tmp161_;
						gchar* _tmp162_;
						gchar* _tmp163_;
						gchar* _tmp164_;
						gchar* _tmp165_;
						gboolean _tmp166_;
						if (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GOM_ELEMENT)) {
							GXmlDomDocument* _tmp136_;
							GXmlDomDocument* _tmp137_;
							GXmlDomElement* _tmp138_;
							GXmlDomElement* _tmp139_;
							GXmlDomElement* _tmp140_;
							gboolean _tmp141_;
							_tmp136_ = gxml_dom_node_get_owner_document ((GXmlDomNode*) element);
							_tmp137_ = _tmp136_;
							_tmp138_ = gxml_dom_document_get_document_element (_tmp137_);
							_tmp139_ = _tmp138_;
							_tmp140_ = _tmp139_;
							_tmp141_ = element != _tmp140_;
							_g_object_unref0 (_tmp140_);
							if (_tmp141_) {
								result = FALSE;
								_g_object_unref0 (s);
								return result;
							}
						}
						if (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GELEMENT)) {
							xmlNode* _tmp142_;
							GXmlDomDocument* _tmp143_;
							GXmlDomDocument* _tmp144_;
							GXmlDomElement* _tmp145_;
							GXmlDomElement* _tmp146_;
							GXmlGNode* _tmp147_;
							GXmlGNode* _tmp148_;
							xmlNode* _tmp149_;
							gboolean _tmp150_;
							_tmp142_ = gxml_gnode_get_internal_node (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GNODE) ? ((GXmlGNode*) element) : NULL);
							_tmp143_ = gxml_dom_node_get_owner_document ((GXmlDomNode*) element);
							_tmp144_ = _tmp143_;
							_tmp145_ = gxml_dom_document_get_document_element (_tmp144_);
							_tmp146_ = _tmp145_;
							_tmp147_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp146_, GXML_TYPE_GNODE) ? ((GXmlGNode*) _tmp146_) : NULL;
							if (_tmp147_ == NULL) {
								_g_object_unref0 (_tmp146_);
							}
							_tmp148_ = _tmp147_;
							_tmp149_ = gxml_gnode_get_internal_node (_tmp148_);
							_tmp150_ = _tmp142_ != _tmp149_;
							_g_object_unref0 (_tmp148_);
							if (_tmp150_) {
								result = FALSE;
								_g_object_unref0 (s);
								return result;
							}
						}
						_tmp151_ = gxml_dom_node_get_node_name ((GXmlDomNode*) element);
						_tmp152_ = _tmp151_;
						_tmp153_ = _tmp152_;
						_tmp154_ = g_utf8_strdown (_tmp153_, (gssize) -1);
						_tmp155_ = _tmp154_;
						_tmp156_ = gxml_dom_node_get_owner_document ((GXmlDomNode*) element);
						_tmp157_ = _tmp156_;
						_tmp158_ = gxml_dom_document_get_document_element (_tmp157_);
						_tmp159_ = _tmp158_;
						_tmp160_ = _tmp159_;
						_tmp161_ = gxml_dom_node_get_node_name ((GXmlDomNode*) _tmp160_);
						_tmp162_ = _tmp161_;
						_tmp163_ = _tmp162_;
						_tmp164_ = g_utf8_strdown (_tmp163_, (gssize) -1);
						_tmp165_ = _tmp164_;
						_tmp166_ = g_strcmp0 (_tmp155_, _tmp165_) == 0;
						_g_free0 (_tmp165_);
						_g_free0 (_tmp163_);
						_g_object_unref0 (_tmp160_);
						_g_free0 (_tmp155_);
						_g_free0 (_tmp153_);
						if (_tmp166_) {
							result = TRUE;
							_g_object_unref0 (s);
							return result;
						}
					}
					_tmp167_ = s;
					_tmp168_ = gxml_css_selector_data_get_data (_tmp167_);
					_tmp169_ = _tmp168_;
					_tmp170_ = g_utf8_strdown (_tmp169_, (gssize) -1);
					_tmp171_ = _tmp170_;
					_tmp172_ = g_strcmp0 (_tmp171_, "checked") == 0;
					_g_free0 (_tmp171_);
					if (_tmp172_) {
						GXmlDomDocument* _tmp173_;
						GXmlDomDocument* _tmp174_;
						_tmp173_ = gxml_dom_node_get_owner_document ((GXmlDomNode*) element);
						_tmp174_ = _tmp173_;
						if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp174_, GXML_TYPE_DOM_HTML_DOCUMENT)) {
							result = FALSE;
							_g_object_unref0 (s);
							return result;
						}
					}
					_tmp175_ = s;
					_tmp176_ = gxml_css_selector_data_get_data (_tmp175_);
					_tmp177_ = _tmp176_;
					_tmp178_ = g_utf8_strdown (_tmp177_, (gssize) -1);
					_tmp179_ = _tmp178_;
					_tmp180_ = g_strcmp0 (_tmp179_, "enable") == 0;
					_g_free0 (_tmp179_);
					if (_tmp180_) {
						GXmlDomDocument* _tmp181_;
						GXmlDomDocument* _tmp182_;
						_tmp181_ = gxml_dom_node_get_owner_document ((GXmlDomNode*) element);
						_tmp182_ = _tmp181_;
						if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp182_, GXML_TYPE_DOM_HTML_DOCUMENT)) {
							result = FALSE;
							_g_object_unref0 (s);
							return result;
						}
					}
					_tmp183_ = s;
					_tmp184_ = gxml_css_selector_data_get_data (_tmp183_);
					_tmp185_ = _tmp184_;
					_tmp186_ = g_utf8_strdown (_tmp185_, (gssize) -1);
					_tmp187_ = _tmp186_;
					_tmp188_ = g_strcmp0 (_tmp187_, "disabled") == 0;
					_g_free0 (_tmp187_);
					if (_tmp188_) {
						GXmlDomDocument* _tmp189_;
						GXmlDomDocument* _tmp190_;
						_tmp189_ = gxml_dom_node_get_owner_document ((GXmlDomNode*) element);
						_tmp190_ = _tmp189_;
						if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp190_, GXML_TYPE_DOM_HTML_DOCUMENT)) {
							result = FALSE;
							_g_object_unref0 (s);
							return result;
						}
					}
					_tmp191_ = s;
					_tmp192_ = gxml_css_selector_data_get_data (_tmp191_);
					_tmp193_ = _tmp192_;
					_tmp194_ = g_utf8_strdown (_tmp193_, (gssize) -1);
					_tmp195_ = _tmp194_;
					_tmp196_ = g_strcmp0 (_tmp195_, "empty") == 0;
					_g_free0 (_tmp195_);
					if (_tmp196_) {
						if (!gxml_dom_node_has_child_nodes ((GXmlDomNode*) element)) {
							result = TRUE;
							_g_object_unref0 (s);
							return result;
						}
					}
					_tmp197_ = s;
					_tmp198_ = gxml_css_selector_data_get_data (_tmp197_);
					_tmp199_ = _tmp198_;
					_tmp200_ = g_utf8_strdown (_tmp199_, (gssize) -1);
					_tmp201_ = _tmp200_;
					_tmp202_ = g_strcmp0 (_tmp201_, "first-child") == 0;
					_g_free0 (_tmp201_);
					if (_tmp202_) {
						GXmlDomNode* _tmp203_;
						GXmlDomNode* _tmp204_;
						GXmlDomNode* _tmp205_;
						gboolean _tmp206_;
						GXmlDomNode* _tmp207_;
						GXmlDomNode* _tmp208_;
						GXmlDomNode* _tmp209_;
						gboolean _tmp210_;
						_tmp203_ = gxml_dom_node_get_parent_node ((GXmlDomNode*) element);
						_tmp204_ = _tmp203_;
						_tmp205_ = _tmp204_;
						_tmp206_ = _tmp205_ == NULL;
						_g_object_unref0 (_tmp205_);
						if (_tmp206_) {
							result = FALSE;
							_g_object_unref0 (s);
							return result;
						}
						_tmp207_ = gxml_dom_node_get_parent_node ((GXmlDomNode*) element);
						_tmp208_ = _tmp207_;
						_tmp209_ = _tmp208_;
						_tmp210_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp209_, GXML_TYPE_DOM_ELEMENT);
						_g_object_unref0 (_tmp209_);
						if (_tmp210_) {
							result = FALSE;
							_g_object_unref0 (s);
							return result;
						}
						if (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GOM_ELEMENT)) {
							GXmlDomNode* _tmp211_;
							GXmlDomNode* _tmp212_;
							GXmlDomParentNode* _tmp213_;
							GXmlDomParentNode* _tmp214_;
							GXmlDomElement* _tmp215_;
							GXmlDomElement* _tmp216_;
							GXmlDomElement* _tmp217_;
							gboolean _tmp218_;
							_tmp211_ = gxml_dom_node_get_parent_node ((GXmlDomNode*) element);
							_tmp212_ = _tmp211_;
							_tmp213_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp212_, GXML_TYPE_DOM_PARENT_NODE) ? ((GXmlDomParentNode*) _tmp212_) : NULL;
							if (_tmp213_ == NULL) {
								_g_object_unref0 (_tmp212_);
							}
							_tmp214_ = _tmp213_;
							_tmp215_ = gxml_dom_parent_node_get_first_element_child (_tmp214_);
							_tmp216_ = _tmp215_;
							_tmp217_ = _tmp216_;
							_tmp218_ = element == _tmp217_;
							_g_object_unref0 (_tmp217_);
							_g_object_unref0 (_tmp214_);
							if (_tmp218_) {
								result = TRUE;
								_g_object_unref0 (s);
								return result;
							}
						}
						if (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GELEMENT)) {
							xmlNode* _tmp219_;
							GXmlDomNode* _tmp220_;
							GXmlDomNode* _tmp221_;
							GXmlDomParentNode* _tmp222_;
							GXmlDomParentNode* _tmp223_;
							GXmlDomElement* _tmp224_;
							GXmlDomElement* _tmp225_;
							GXmlGNode* _tmp226_;
							GXmlGNode* _tmp227_;
							xmlNode* _tmp228_;
							gboolean _tmp229_;
							_tmp219_ = gxml_gnode_get_internal_node (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GNODE) ? ((GXmlGNode*) element) : NULL);
							_tmp220_ = gxml_dom_node_get_parent_node ((GXmlDomNode*) element);
							_tmp221_ = _tmp220_;
							_tmp222_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp221_, GXML_TYPE_DOM_PARENT_NODE) ? ((GXmlDomParentNode*) _tmp221_) : NULL;
							if (_tmp222_ == NULL) {
								_g_object_unref0 (_tmp221_);
							}
							_tmp223_ = _tmp222_;
							_tmp224_ = gxml_dom_parent_node_get_first_element_child (_tmp223_);
							_tmp225_ = _tmp224_;
							_tmp226_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp225_, GXML_TYPE_GNODE) ? ((GXmlGNode*) _tmp225_) : NULL;
							if (_tmp226_ == NULL) {
								_g_object_unref0 (_tmp225_);
							}
							_tmp227_ = _tmp226_;
							_tmp228_ = gxml_gnode_get_internal_node (_tmp227_);
							_tmp229_ = _tmp219_ == _tmp228_;
							_g_object_unref0 (_tmp227_);
							_g_object_unref0 (_tmp223_);
							if (_tmp229_) {
								result = TRUE;
								_g_object_unref0 (s);
								return result;
							}
						}
					}
					_tmp230_ = s;
					_tmp231_ = gxml_css_selector_data_get_data (_tmp230_);
					_tmp232_ = _tmp231_;
					_tmp233_ = g_utf8_strdown (_tmp232_, (gssize) -1);
					_tmp234_ = _tmp233_;
					_tmp235_ = g_strcmp0 (_tmp234_, "last-child") == 0;
					_g_free0 (_tmp234_);
					if (_tmp235_) {
						GXmlDomNode* _tmp236_;
						GXmlDomNode* _tmp237_;
						GXmlDomNode* _tmp238_;
						gboolean _tmp239_;
						GXmlDomNode* _tmp240_;
						GXmlDomNode* _tmp241_;
						GXmlDomNode* _tmp242_;
						gboolean _tmp243_;
						_tmp236_ = gxml_dom_node_get_parent_node ((GXmlDomNode*) element);
						_tmp237_ = _tmp236_;
						_tmp238_ = _tmp237_;
						_tmp239_ = _tmp238_ == NULL;
						_g_object_unref0 (_tmp238_);
						if (_tmp239_) {
							result = FALSE;
							_g_object_unref0 (s);
							return result;
						}
						_tmp240_ = gxml_dom_node_get_parent_node ((GXmlDomNode*) element);
						_tmp241_ = _tmp240_;
						_tmp242_ = _tmp241_;
						_tmp243_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp242_, GXML_TYPE_DOM_ELEMENT);
						_g_object_unref0 (_tmp242_);
						if (_tmp243_) {
							result = FALSE;
							_g_object_unref0 (s);
							return result;
						}
						if (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GOM_ELEMENT)) {
							GXmlDomNode* _tmp244_;
							GXmlDomNode* _tmp245_;
							GXmlDomParentNode* _tmp246_;
							GXmlDomParentNode* _tmp247_;
							GXmlDomElement* _tmp248_;
							GXmlDomElement* _tmp249_;
							GXmlDomElement* _tmp250_;
							gboolean _tmp251_;
							_tmp244_ = gxml_dom_node_get_parent_node ((GXmlDomNode*) element);
							_tmp245_ = _tmp244_;
							_tmp246_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp245_, GXML_TYPE_DOM_PARENT_NODE) ? ((GXmlDomParentNode*) _tmp245_) : NULL;
							if (_tmp246_ == NULL) {
								_g_object_unref0 (_tmp245_);
							}
							_tmp247_ = _tmp246_;
							_tmp248_ = gxml_dom_parent_node_get_last_element_child (_tmp247_);
							_tmp249_ = _tmp248_;
							_tmp250_ = _tmp249_;
							_tmp251_ = element == _tmp250_;
							_g_object_unref0 (_tmp250_);
							_g_object_unref0 (_tmp247_);
							if (_tmp251_) {
								result = TRUE;
								_g_object_unref0 (s);
								return result;
							}
						}
						if (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GELEMENT)) {
							xmlNode* _tmp252_;
							GXmlDomNode* _tmp253_;
							GXmlDomNode* _tmp254_;
							GXmlDomParentNode* _tmp255_;
							GXmlDomParentNode* _tmp256_;
							GXmlDomElement* _tmp257_;
							GXmlDomElement* _tmp258_;
							GXmlGNode* _tmp259_;
							GXmlGNode* _tmp260_;
							xmlNode* _tmp261_;
							gboolean _tmp262_;
							_tmp252_ = gxml_gnode_get_internal_node (G_TYPE_CHECK_INSTANCE_TYPE (element, GXML_TYPE_GNODE) ? ((GXmlGNode*) element) : NULL);
							_tmp253_ = gxml_dom_node_get_parent_node ((GXmlDomNode*) element);
							_tmp254_ = _tmp253_;
							_tmp255_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp254_, GXML_TYPE_DOM_PARENT_NODE) ? ((GXmlDomParentNode*) _tmp254_) : NULL;
							if (_tmp255_ == NULL) {
								_g_object_unref0 (_tmp254_);
							}
							_tmp256_ = _tmp255_;
							_tmp257_ = gxml_dom_parent_node_get_last_element_child (_tmp256_);
							_tmp258_ = _tmp257_;
							_tmp259_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp258_, GXML_TYPE_GNODE) ? ((GXmlGNode*) _tmp258_) : NULL;
							if (_tmp259_ == NULL) {
								_g_object_unref0 (_tmp258_);
							}
							_tmp260_ = _tmp259_;
							_tmp261_ = gxml_gnode_get_internal_node (_tmp260_);
							_tmp262_ = _tmp252_ == _tmp261_;
							_g_object_unref0 (_tmp260_);
							_g_object_unref0 (_tmp256_);
							if (_tmp262_) {
								result = TRUE;
								_g_object_unref0 (s);
								return result;
							}
						}
					}
				}
				_tmp263_ = s;
				_tmp264_ = gxml_css_selector_data_get_selector_type (_tmp263_);
				_tmp265_ = _tmp264_;
				if (_tmp265_ == GXML_CSS_SELECTOR_TYPE_CLASS) {
					gchar* p = NULL;
					gchar* _tmp266_;
					const gchar* _tmp267_;
					GXmlDomTokenList* lc = NULL;
					GXmlDomTokenList* _tmp268_;
					GXmlDomTokenList* _tmp269_;
					gboolean _tmp270_ = FALSE;
					GXmlDomTokenList* _tmp271_;
					GXmlCssSelectorData* _tmp272_;
					const gchar* _tmp273_;
					const gchar* _tmp274_;
					const gchar* _tmp276_;
					_tmp266_ = gxml_dom_element_get_attribute (element, "class");
					p = _tmp266_;
					_tmp267_ = p;
					if (_tmp267_ == NULL) {
						result = FALSE;
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_tmp268_ = gxml_dom_element_get_class_list (element);
					_tmp269_ = _tmp268_;
					lc = _tmp269_;
					_tmp271_ = lc;
					_tmp272_ = s;
					_tmp273_ = gxml_css_selector_data_get_data (_tmp272_);
					_tmp274_ = _tmp273_;
					_tmp270_ = gxml_dom_token_list_contains (_tmp271_, _tmp274_, &_inner_error_);
					if (G_UNLIKELY (_inner_error_ != NULL)) {
						gboolean _tmp275_ = FALSE;
						g_propagate_error (error, _inner_error_);
						_g_object_unref0 (lc);
						_g_free0 (p);
						_g_object_unref0 (s);
						return _tmp275_;
					}
					if (_tmp270_) {
						result = TRUE;
						_g_object_unref0 (lc);
						_g_free0 (p);
						_g_object_unref0 (s);
						return result;
					}
					_tmp276_ = p;
					if (g_strcmp0 (_tmp276_, "warning") == 0) {
						g_warning ("CssSelectorParser.vala:415: Not found");
					}
					_g_object_unref0 (lc);
					_g_free0 (p);
				}
				_g_object_unref0 (s);
			}
		}
	}
	result = FALSE;
	return result;
}


GXmlCssSelectorParser*
gxml_css_selector_parser_construct (GType object_type)
{
	GXmlCssSelectorParser * self = NULL;
	self = (GXmlCssSelectorParser*) g_object_new (object_type, NULL);
	return self;
}


GXmlCssSelectorParser*
gxml_css_selector_parser_new (void)
{
	return gxml_css_selector_parser_construct (GXML_TYPE_CSS_SELECTOR_PARSER);
}


GeeList*
gxml_css_selector_parser_get_selectors (GXmlCssSelectorParser* self)
{
	GeeList* result;
	GeeArrayList* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->list;
	result = (GeeList*) _tmp0_;
	return result;
}


static GObject *
gxml_css_selector_parser_constructor (GType type, 
                                      guint n_construct_properties, 
                                      GObjectConstructParam * construct_properties)
{
	GObject * obj;
	GObjectClass * parent_class;
	GXmlCssSelectorParser * self;
	GeeArrayList* _tmp0_;
	parent_class = G_OBJECT_CLASS (gxml_css_selector_parser_parent_class);
	obj = parent_class->constructor (type, n_construct_properties, construct_properties);
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GXML_TYPE_CSS_SELECTOR_PARSER, GXmlCssSelectorParser);
	_tmp0_ = gee_array_list_new (GXML_TYPE_CSS_SELECTOR_DATA, (GBoxedCopyFunc) g_object_ref, (GDestroyNotify) g_object_unref, NULL, NULL, NULL);
	_g_object_unref0 (self->priv->list);
	self->priv->list = _tmp0_;
	return obj;
}


static void
gxml_css_selector_parser_class_init (GXmlCssSelectorParserClass * klass)
{
	gxml_css_selector_parser_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (GXmlCssSelectorParserPrivate));
	G_OBJECT_CLASS (klass)->get_property = _vala_gxml_css_selector_parser_get_property;
	G_OBJECT_CLASS (klass)->constructor = gxml_css_selector_parser_constructor;
	G_OBJECT_CLASS (klass)->finalize = gxml_css_selector_parser_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_CSS_SELECTOR_PARSER_SELECTORS_PROPERTY, gxml_css_selector_parser_properties[GXML_CSS_SELECTOR_PARSER_SELECTORS_PROPERTY] = g_param_spec_object ("selectors", "selectors", "selectors", GEE_TYPE_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
}


static void
gxml_css_selector_parser_instance_init (GXmlCssSelectorParser * self)
{
	self->priv = GXML_CSS_SELECTOR_PARSER_GET_PRIVATE (self);
}


static void
gxml_css_selector_parser_finalize (GObject * obj)
{
	GXmlCssSelectorParser * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GXML_TYPE_CSS_SELECTOR_PARSER, GXmlCssSelectorParser);
	_g_object_unref0 (self->priv->list);
	G_OBJECT_CLASS (gxml_css_selector_parser_parent_class)->finalize (obj);
}


GType
gxml_css_selector_parser_get_type (void)
{
	static volatile gsize gxml_css_selector_parser_type_id__volatile = 0;
	if (g_once_init_enter (&gxml_css_selector_parser_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (GXmlCssSelectorParserClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gxml_css_selector_parser_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GXmlCssSelectorParser), 0, (GInstanceInitFunc) gxml_css_selector_parser_instance_init, NULL };
		GType gxml_css_selector_parser_type_id;
		gxml_css_selector_parser_type_id = g_type_register_static (G_TYPE_OBJECT, "GXmlCssSelectorParser", &g_define_type_info, 0);
		g_once_init_leave (&gxml_css_selector_parser_type_id__volatile, gxml_css_selector_parser_type_id);
	}
	return gxml_css_selector_parser_type_id__volatile;
}


static void
_vala_gxml_css_selector_parser_get_property (GObject * object, 
                                             guint property_id, 
                                             GValue * value, 
                                             GParamSpec * pspec)
{
	GXmlCssSelectorParser * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, GXML_TYPE_CSS_SELECTOR_PARSER, GXmlCssSelectorParser);
	switch (property_id) {
		case GXML_CSS_SELECTOR_PARSER_SELECTORS_PROPERTY:
		g_value_set_object (value, gxml_css_selector_parser_get_selectors (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


static void
_vala_array_destroy (gpointer array, 
                     gint array_length, 
                     GDestroyNotify destroy_func)
{
	if ((array != NULL) && (destroy_func != NULL)) {
		int i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}


static void
_vala_array_free (gpointer array, 
                  gint array_length, 
                  GDestroyNotify destroy_func)
{
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}



