ext/libxml/ruby_libxml.h | 22 - ext/libxml/ruby_xml.c | 2 + ext/libxml/ruby_xml_document.c | 6 + ext/libxml/ruby_xml_encoding.h | 2 + ext/libxml/ruby_xml_error.h | 2 + ext/libxml/ruby_xml_html_parser.c | 2 + ext/libxml/ruby_xml_html_parser_context.c | 1 + ext/libxml/ruby_xml_html_parser_options.c | 2 + ext/libxml/ruby_xml_node.c | 4 + ext/libxml/ruby_xml_parser_context.c | 2 + ext/libxml/ruby_xml_reader.c | 3 + ext/libxml/ruby_xml_reader.h | 3 - ext/libxml/ruby_xml_relaxng.c | 2 + ext/libxml/ruby_xml_relaxng.h | 2 - ext/libxml/ruby_xml_schema.c | 74 ++- ext/libxml/ruby_xml_schema.h | 789 +----------------------------- ext/libxml/ruby_xml_schema_attribute.c | 46 ++ ext/libxml/ruby_xml_schema_attribute.h | 28 +- ext/libxml/ruby_xml_schema_element.h | 3 - ext/libxml/ruby_xml_schema_facet.c | 4 + ext/libxml/ruby_xml_schema_facet.h | 4 - ext/libxml/ruby_xml_schema_type.c | 37 ++ ext/libxml/ruby_xml_writer.c | 4 + ext/libxml/ruby_xml_writer.h | 4 - ext/libxml/ruby_xml_xinclude.c | 4 + ext/libxml/ruby_xml_xpath.c | 1 + ext/libxml/ruby_xml_xpath.h | 2 + ext/libxml/ruby_xml_xpath_context.c | 2 + ext/libxml/ruby_xml_xpath_object.c | 1 + ext/libxml/ruby_xml_xpointer.c | 6 +- lib/libxml-ruby.rb | 2 +- test/test_helper.rb | 4 + test/test_xml.rb | 18 +- 33 files changed, 255 insertions(+), 833 deletions(-) diff --git a/ext/libxml/ruby_libxml.h b/ext/libxml/ruby_libxml.h index a66b722..891f746 100644 --- a/ext/libxml/ruby_libxml.h +++ b/ext/libxml/ruby_libxml.h @@ -4,29 +4,7 @@ #define __RUBY_LIBXML_H__ #include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include - -#include - -#ifdef LIBXML_DEBUG_ENABLED -#include -#endif -#ifdef LIBXML_XINCLUDE_ENABLED -#include -#endif -#ifdef LIBXML_XPTR_ENABLED -#include -#endif #include "ruby_xml_version.h" #include "ruby_xml.h" diff --git a/ext/libxml/ruby_xml.c b/ext/libxml/ruby_xml.c index a3bd312..25ff94c 100644 --- a/ext/libxml/ruby_xml.c +++ b/ext/libxml/ruby_xml.c @@ -1,6 +1,8 @@ #include "ruby_libxml.h" #include "ruby_xml.h" +#include + VALUE mXML; /* diff --git a/ext/libxml/ruby_xml_document.c b/ext/libxml/ruby_xml_document.c index 0dce1c1..e372761 100644 --- a/ext/libxml/ruby_xml_document.c +++ b/ext/libxml/ruby_xml_document.c @@ -52,6 +52,12 @@ #include "ruby_libxml.h" #include "ruby_xml_document.h" +#include +#include +#include +#include +#include + VALUE cXMLDocument; void rxml_document_free(xmlDocPtr xdoc) diff --git a/ext/libxml/ruby_xml_encoding.h b/ext/libxml/ruby_xml_encoding.h index e0d89b4..3055e37 100644 --- a/ext/libxml/ruby_xml_encoding.h +++ b/ext/libxml/ruby_xml_encoding.h @@ -3,6 +3,8 @@ #ifndef __RXML_ENCODING__ #define __RXML_ENCODING__ +#include + extern VALUE mXMLEncoding; void rxml_init_encoding(); diff --git a/ext/libxml/ruby_xml_error.h b/ext/libxml/ruby_xml_error.h index ed276c8..b86bec3 100644 --- a/ext/libxml/ruby_xml_error.h +++ b/ext/libxml/ruby_xml_error.h @@ -3,6 +3,8 @@ #ifndef __RXML_ERROR__ #define __RXML_ERROR__ +#include + extern VALUE eXMLError; void rxml_init_error(); diff --git a/ext/libxml/ruby_xml_html_parser.c b/ext/libxml/ruby_xml_html_parser.c index 8f7cc0f..eb44d6d 100644 --- a/ext/libxml/ruby_xml_html_parser.c +++ b/ext/libxml/ruby_xml_html_parser.c @@ -2,6 +2,8 @@ #include "ruby_libxml.h" +#include + /* Document-class: LibXML::XML::HTMLParser * * The HTML parser implements an HTML 4.0 non-verifying parser with an API diff --git a/ext/libxml/ruby_xml_html_parser_context.c b/ext/libxml/ruby_xml_html_parser_context.c index 4161d4c..53c2525 100644 --- a/ext/libxml/ruby_xml_html_parser_context.c +++ b/ext/libxml/ruby_xml_html_parser_context.c @@ -3,6 +3,7 @@ #include "ruby_libxml.h" #include "ruby_xml_html_parser_context.h" +#include /* * Document-class: LibXML::XML::HTMLParser::Context diff --git a/ext/libxml/ruby_xml_html_parser_options.c b/ext/libxml/ruby_xml_html_parser_options.c index a068f4a..7d18b40 100644 --- a/ext/libxml/ruby_xml_html_parser_options.c +++ b/ext/libxml/ruby_xml_html_parser_options.c @@ -2,6 +2,8 @@ #include "ruby_libxml.h" +#include + /* Document-class: LibXML::XML::HTMLParser::Options * * Options to control the operation of the HTMLParser. The easiest diff --git a/ext/libxml/ruby_xml_node.c b/ext/libxml/ruby_xml_node.c index 4211fb6..2fdea63 100644 --- a/ext/libxml/ruby_xml_node.c +++ b/ext/libxml/ruby_xml_node.c @@ -2,6 +2,10 @@ #include "ruby_xml_node.h" #include +#include +#include +#include + VALUE cXMLNode; /* Document-class: LibXML::XML::Node diff --git a/ext/libxml/ruby_xml_parser_context.c b/ext/libxml/ruby_xml_parser_context.c index e9f7a04..a30818a 100644 --- a/ext/libxml/ruby_xml_parser_context.c +++ b/ext/libxml/ruby_xml_parser_context.c @@ -3,6 +3,8 @@ #include "ruby_libxml.h" #include "ruby_xml_parser_context.h" +#include + VALUE cXMLParserContext; static ID IO_ATTR; diff --git a/ext/libxml/ruby_xml_reader.c b/ext/libxml/ruby_xml_reader.c index 3fcdecc..924efa7 100644 --- a/ext/libxml/ruby_xml_reader.c +++ b/ext/libxml/ruby_xml_reader.c @@ -4,6 +4,9 @@ #include "ruby_libxml.h" #include "ruby_xml_reader.h" +#include +#include + /* * Document-class: LibXML::XML::Reader * diff --git a/ext/libxml/ruby_xml_reader.h b/ext/libxml/ruby_xml_reader.h index b7c2707..451bd23 100644 --- a/ext/libxml/ruby_xml_reader.h +++ b/ext/libxml/ruby_xml_reader.h @@ -4,9 +4,6 @@ #ifndef __RXML_READER__ #define __RXML_READER__ -#include -#include - extern VALUE cXMLReader; void rxml_init_reader(void); diff --git a/ext/libxml/ruby_xml_relaxng.c b/ext/libxml/ruby_xml_relaxng.c index 053df40..395e403 100644 --- a/ext/libxml/ruby_xml_relaxng.c +++ b/ext/libxml/ruby_xml_relaxng.c @@ -1,6 +1,8 @@ #include "ruby_libxml.h" #include "ruby_xml_relaxng.h" +#include + /* * Document-class: LibXML::XML::RelaxNG * diff --git a/ext/libxml/ruby_xml_relaxng.h b/ext/libxml/ruby_xml_relaxng.h index 47dc89f..f1542ae 100644 --- a/ext/libxml/ruby_xml_relaxng.h +++ b/ext/libxml/ruby_xml_relaxng.h @@ -1,8 +1,6 @@ #ifndef __RXML_RELAXNG__ #define __RXML_RELAXNG__ -#include - extern VALUE cXMLRelaxNG; void rxml_init_relaxng(void); diff --git a/ext/libxml/ruby_xml_schema.c b/ext/libxml/ruby_xml_schema.c index e56edba..5aad475 100644 --- a/ext/libxml/ruby_xml_schema.c +++ b/ext/libxml/ruby_xml_schema.c @@ -1,6 +1,4 @@ #include "ruby_libxml.h" -#define LIBXML_OUTPUT_ENABLED -#define DUMP_CONTENT_MODEL #include "ruby_xml_schema.h" #include "ruby_xml_schema_type.h" @@ -8,6 +6,78 @@ #include "ruby_xml_schema_attribute.h" #include "ruby_xml_schema_facet.h" +#include + +typedef struct _xmlSchemaBucket xmlSchemaBucket; +typedef xmlSchemaBucket *xmlSchemaBucketPtr; + +/** + * xmlSchemaSchemaRelation: + * + * Used to create a graph of schema relationships. + */ +typedef struct _xmlSchemaSchemaRelation xmlSchemaSchemaRelation; +typedef xmlSchemaSchemaRelation *xmlSchemaSchemaRelationPtr; +struct _xmlSchemaSchemaRelation { + xmlSchemaSchemaRelationPtr next; + int type; + /* E.g. XML_SCHEMA_SCHEMA_IMPORT */ + const xmlChar *importNamespace; + xmlSchemaBucketPtr bucket; +}; + +struct _xmlSchemaBucket { + int type; + int flags; + const xmlChar *schemaLocation; + const xmlChar *origTargetNamespace; + const xmlChar *targetNamespace; + xmlDocPtr doc; + xmlSchemaSchemaRelationPtr relations; + int located; + int parsed; + int imported; + int preserveDoc; + xmlSchemaItemListPtr globals; + /* Global components. */ + xmlSchemaItemListPtr locals; /* Local components. */ +}; + +/** + * xmlSchemaImport: + * (extends xmlSchemaBucket) + * + * Reflects a schema. Holds some information + * about the schema and its toplevel components. Duplicate + * toplevel components are not checked at this level. + */ +typedef struct _xmlSchemaImport xmlSchemaImport; +typedef xmlSchemaImport *xmlSchemaImportPtr; +struct _xmlSchemaImport { + int type; + /* Main OR import OR include. */ + int flags; + const xmlChar *schemaLocation; /* The URI of the schema document. */ + /* For chameleon includes, @origTargetNamespace will be NULL */ + const xmlChar *origTargetNamespace; + /* + * For chameleon includes, @targetNamespace will be the + * targetNamespace of the including schema. + */ + const xmlChar *targetNamespace; + xmlDocPtr doc; /* The schema node-tree. */ + /* @relations will hold any included/imported/redefined schemas. */ + xmlSchemaSchemaRelationPtr relations; + int located; + int parsed; + int imported; + int preserveDoc; + xmlSchemaItemListPtr globals; + xmlSchemaItemListPtr locals; + /* The imported schema. */ + xmlSchemaPtr schema; +}; + /* * Document-class: LibXML::XML::Schema * diff --git a/ext/libxml/ruby_xml_schema.h b/ext/libxml/ruby_xml_schema.h index ed6e53f..961d0e2 100644 --- a/ext/libxml/ruby_xml_schema.h +++ b/ext/libxml/ruby_xml_schema.h @@ -2,25 +2,8 @@ #define __RXML_SCHEMA__ #include -#include #include -extern VALUE cXMLSchema; - -void rxml_init_schema(void); - -#define QNIL_OR_STRING(slot) \ - (slot == NULL) ? Qnil : rb_str_new2((const char *)slot) - -#define SUBSET_RESTRICTION 1<<0 -#define SUBSET_EXTENSION 1<<1 -#define SUBSET_SUBSTITUTION 1<<2 -#define SUBSET_LIST 1<<3 -#define SUBSET_UNION 1<<4 - -typedef struct _xmlSchemaNodeInfo xmlSchemaNodeInfo; -typedef xmlSchemaNodeInfo *xmlSchemaNodeInfoPtr; - typedef struct _xmlSchemaItemList xmlSchemaItemList; typedef xmlSchemaItemList *xmlSchemaItemListPtr; struct _xmlSchemaItemList { @@ -31,776 +14,12 @@ struct _xmlSchemaItemList { int sizeItems; /* used for dynamic addition of schemata */ }; -#define XML_SCHEMA_CTXT_PARSER 1 -#define XML_SCHEMA_CTXT_VALIDATOR 2 - -typedef struct _xmlSchemaAbstractCtxt xmlSchemaAbstractCtxt; -typedef xmlSchemaAbstractCtxt *xmlSchemaAbstractCtxtPtr; -struct _xmlSchemaAbstractCtxt { - int type; /* E.g. XML_SCHEMA_CTXT_VALIDATOR */ -}; - -typedef struct _xmlSchemaBucket xmlSchemaBucket; -typedef xmlSchemaBucket *xmlSchemaBucketPtr; - -#define XML_SCHEMA_SCHEMA_MAIN 0 -#define XML_SCHEMA_SCHEMA_IMPORT 1 -#define XML_SCHEMA_SCHEMA_INCLUDE 2 -#define XML_SCHEMA_SCHEMA_REDEFINE 3 - -/** - * xmlSchemaSchemaRelation: - * - * Used to create a graph of schema relationships. - */ -typedef struct _xmlSchemaSchemaRelation xmlSchemaSchemaRelation; -typedef xmlSchemaSchemaRelation *xmlSchemaSchemaRelationPtr; -struct _xmlSchemaSchemaRelation { - xmlSchemaSchemaRelationPtr next; - int type; - /* E.g. XML_SCHEMA_SCHEMA_IMPORT */ - const xmlChar *importNamespace; - xmlSchemaBucketPtr bucket; -}; - -#define XML_SCHEMA_BUCKET_MARKED 1<<0 -#define XML_SCHEMA_BUCKET_COMPS_ADDED 1<<1 - -struct _xmlSchemaBucket { - int type; - int flags; - const xmlChar *schemaLocation; - const xmlChar *origTargetNamespace; - const xmlChar *targetNamespace; - xmlDocPtr doc; - xmlSchemaSchemaRelationPtr relations; - int located; - int parsed; - int imported; - int preserveDoc; - xmlSchemaItemListPtr globals; - /* Global components. */ - xmlSchemaItemListPtr locals; /* Local components. */ -}; - -/** - * xmlSchemaImport: - * (extends xmlSchemaBucket) - * - * Reflects a schema. Holds some information - * about the schema and its toplevel components. Duplicate - * toplevel components are not checked at this level. - */ -typedef struct _xmlSchemaImport xmlSchemaImport; -typedef xmlSchemaImport *xmlSchemaImportPtr; -struct _xmlSchemaImport { - int type; - /* Main OR import OR include. */ - int flags; - const xmlChar *schemaLocation; /* The URI of the schema document. */ - /* For chameleon includes, @origTargetNamespace will be NULL */ - const xmlChar *origTargetNamespace; - /* - * For chameleon includes, @targetNamespace will be the - * targetNamespace of the including schema. - */ - const xmlChar *targetNamespace; - xmlDocPtr doc; /* The schema node-tree. */ - /* @relations will hold any included/imported/redefined schemas. */ - xmlSchemaSchemaRelationPtr relations; - int located; - int parsed; - int imported; - int preserveDoc; - xmlSchemaItemListPtr globals; - xmlSchemaItemListPtr locals; - /* The imported schema. */ - xmlSchemaPtr schema; -}; - -/* -* (extends xmlSchemaBucket) -*/ -typedef struct _xmlSchemaInclude xmlSchemaInclude; -typedef xmlSchemaInclude *xmlSchemaIncludePtr; -struct _xmlSchemaInclude { - int type; - int flags; - const xmlChar *schemaLocation; - const xmlChar *origTargetNamespace; - const xmlChar *targetNamespace; - xmlDocPtr doc; - xmlSchemaSchemaRelationPtr relations; - int located; - int parsed; - int imported; - int preserveDoc; - xmlSchemaItemListPtr globals; - /* Global components. */ - xmlSchemaItemListPtr locals; /* Local components. */ - - /* The owning main or import schema bucket. */ - xmlSchemaImportPtr ownerImport; -}; - -/** - * xmlSchemaBasicItem: - * - * The abstract base type for schema components. - */ -typedef struct _xmlSchemaBasicItem xmlSchemaBasicItem; -typedef xmlSchemaBasicItem *xmlSchemaBasicItemPtr; -struct _xmlSchemaBasicItem { - xmlSchemaTypeType type; -}; - -/** - * xmlSchemaAnnotItem: - * - * The abstract base type for annotated schema components. - * (Extends xmlSchemaBasicItem) - */ -typedef struct _xmlSchemaAnnotItem xmlSchemaAnnotItem; -typedef xmlSchemaAnnotItem *xmlSchemaAnnotItemPtr; -struct _xmlSchemaAnnotItem { - xmlSchemaTypeType type; - xmlSchemaAnnotPtr annot; -}; - -/** - * xmlSchemaTreeItem: - * - * The abstract base type for tree-like structured schema components. - * (Extends xmlSchemaAnnotItem) - */ -typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem; -typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr; -struct _xmlSchemaTreeItem { - xmlSchemaTypeType type; - xmlSchemaAnnotPtr annot; - xmlSchemaTreeItemPtr next; - xmlSchemaTreeItemPtr children; -}; - - -#define XML_SCHEMA_ATTR_USE_FIXED 1<<0 -/** - * xmlSchemaAttributeUsePtr: - * - * The abstract base type for tree-like structured schema components. - * (Extends xmlSchemaTreeItem) - */ -typedef struct _xmlSchemaAttributeUse xmlSchemaAttributeUse; -typedef xmlSchemaAttributeUse *xmlSchemaAttributeUsePtr; -struct _xmlSchemaAttributeUse { - xmlSchemaTypeType type; - xmlSchemaAnnotPtr annot; - xmlSchemaAttributeUsePtr next; /* The next attr. use. */ - /* - * The attr. decl. OR a QName-ref. to an attr. decl. OR - * a QName-ref. to an attribute group definition. - */ - xmlSchemaAttributePtr attrDecl; - - int flags; - xmlNodePtr node; - int occurs; - /* required, optional */ - const xmlChar *defValue; - xmlSchemaValPtr defVal; -}; - -/** - * xmlSchemaAttributeUseProhibPtr: - * - * A helper component to reflect attribute prohibitions. - * (Extends xmlSchemaBasicItem) - */ -typedef struct _xmlSchemaAttributeUseProhib xmlSchemaAttributeUseProhib; -typedef xmlSchemaAttributeUseProhib *xmlSchemaAttributeUseProhibPtr; -struct _xmlSchemaAttributeUseProhib { - xmlSchemaTypeType type; - /* == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB */ - xmlNodePtr node; - const xmlChar *name; - const xmlChar *targetNamespace; - int isRef; -}; - -/** - * xmlSchemaRedef: - */ -typedef struct _xmlSchemaRedef xmlSchemaRedef; -typedef xmlSchemaRedef *xmlSchemaRedefPtr; -struct _xmlSchemaRedef { - xmlSchemaRedefPtr next; - xmlSchemaBasicItemPtr item; - /* The redefining component. */ - xmlSchemaBasicItemPtr reference; - /* The referencing component. */ - xmlSchemaBasicItemPtr target; - /* The to-be-redefined component. */ - const xmlChar *refName; - /* The name of the to-be-redefined component. */ - const xmlChar *refTargetNs; - /* The target namespace of the - to-be-redefined comp. */ - xmlSchemaBucketPtr targetBucket; /* The redefined schema. */ -}; - -/** - * xmlSchemaConstructionCtxt: - */ -typedef struct _xmlSchemaConstructionCtxt xmlSchemaConstructionCtxt; -typedef xmlSchemaConstructionCtxt *xmlSchemaConstructionCtxtPtr; -struct _xmlSchemaConstructionCtxt { - xmlSchemaPtr mainSchema; - /* The main schema. */ - xmlSchemaBucketPtr mainBucket; - /* The main schema bucket */ - xmlDictPtr dict; - xmlSchemaItemListPtr buckets; /* List of schema buckets. */ - /* xmlSchemaItemListPtr relations; */ /* List of schema relations. */ -xmlSchemaBucketPtr bucket; - /* The current schema bucket */ - xmlSchemaItemListPtr pending; - /* All Components of all schemas that -need to be fixed. */ - xmlHashTablePtr substGroups; - xmlSchemaRedefPtr redefs; - xmlSchemaRedefPtr lastRedef; -}; - -#define XML_SCHEMAS_PARSE_ERROR 1 -#define SCHEMAS_PARSE_OPTIONS XML_PARSE_NOENT - -struct _xmlSchemaParserCtxt { - int type; - void *errCtxt; - /* user specific error context */ - xmlSchemaValidityErrorFunc error; - /* the callback in case of errors */ - xmlSchemaValidityWarningFunc warning; - /* the callback in case of warning */ - int err; - int nberrors; - xmlStructuredErrorFunc serror; - - xmlSchemaConstructionCtxtPtr constructor; - int ownsConstructor; /* TODO: Move this to parser *flags*. */ - - /* xmlSchemaPtr topschema; */ - /* xmlHashTablePtr namespaces; */ - - xmlSchemaPtr schema; - /* The main schema in use */ - int counter; - - const xmlChar *URL; - xmlDocPtr doc; - int preserve; - /* Whether the doc should be freed */ - - const char *buffer; - int size; - - /* - * Used to build complex element content models - */ - xmlAutomataPtr am; - xmlAutomataStatePtr start; - xmlAutomataStatePtr end; - xmlAutomataStatePtr state; - - xmlDictPtr dict; - /* dictionnary for interned string names */ - xmlSchemaTypePtr ctxtType; - /* The current context simple/complex type */ - int options; - xmlSchemaValidCtxtPtr vctxt; - int isS4S; - int isRedefine; - int xsiAssemble; - int stop; - /* If the parser should stop; i.e. a critical error. */ - const xmlChar *targetNamespace; - xmlSchemaBucketPtr redefined; - /* The schema to be redefined. */ - - xmlSchemaRedefPtr redef; - /* Used for redefinitions. */ - int redefCounter; - /* Used for redefinitions. */ - xmlSchemaItemListPtr attrProhibs; -}; - -/** - * xmlSchemaQNameRef: - * - * A component reference item (not a schema component) - * (Extends xmlSchemaBasicItem) - */ -typedef struct _xmlSchemaQNameRef xmlSchemaQNameRef; -typedef xmlSchemaQNameRef *xmlSchemaQNameRefPtr; -struct _xmlSchemaQNameRef { - xmlSchemaTypeType type; - xmlSchemaBasicItemPtr item; - /* The resolved referenced item. */ - xmlSchemaTypeType itemType; - const xmlChar *name; - const xmlChar *targetNamespace; - xmlNodePtr node; -}; - -/** - * xmlSchemaParticle: - * - * A particle component. - * (Extends xmlSchemaTreeItem) - */ -typedef struct _xmlSchemaParticle xmlSchemaParticle; -typedef xmlSchemaParticle *xmlSchemaParticlePtr; -struct _xmlSchemaParticle { - xmlSchemaTypeType type; - xmlSchemaAnnotPtr annot; - xmlSchemaTreeItemPtr next; - /* next particle */ - xmlSchemaTreeItemPtr children; - /* the "term" (e.g. a model group, -a group definition, a XML_SCHEMA_EXTRA_QNAMEREF (if a reference), - etc.) */ - int minOccurs; - int maxOccurs; - xmlNodePtr node; -}; - -/** - * xmlSchemaModelGroup: - * - * A model group component. - * (Extends xmlSchemaTreeItem) - */ -typedef struct _xmlSchemaModelGroup xmlSchemaModelGroup; -typedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr; -struct _xmlSchemaModelGroup { - xmlSchemaTypeType type; - /* XML_SCHEMA_TYPE_SEQUENCE, XML_SCHEMA_TYPE_CHOICE, XML_SCHEMA_TYPE_ALL */ - xmlSchemaAnnotPtr annot; - xmlSchemaTreeItemPtr next; - /* not used */ - xmlSchemaTreeItemPtr children; - /* first particle (OR "element decl" OR "wildcard") */ - xmlNodePtr node; -}; - -#define XML_SCHEMA_MODEL_GROUP_DEF_MARKED 1<<0 -#define XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED 1<<1 -/** - * xmlSchemaModelGroupDef: - * - * A model group definition component. - * (Extends xmlSchemaTreeItem) - */ -typedef struct _xmlSchemaModelGroupDef xmlSchemaModelGroupDef; -typedef xmlSchemaModelGroupDef *xmlSchemaModelGroupDefPtr; -struct _xmlSchemaModelGroupDef { - xmlSchemaTypeType type; - /* XML_SCHEMA_TYPE_GROUP */ - xmlSchemaAnnotPtr annot; - xmlSchemaTreeItemPtr next; - /* not used */ - xmlSchemaTreeItemPtr children; - /* the "model group" */ - const xmlChar *name; - const xmlChar *targetNamespace; - xmlNodePtr node; - int flags; -}; - -typedef struct _xmlSchemaIDC xmlSchemaIDC; -typedef xmlSchemaIDC *xmlSchemaIDCPtr; - -/** - * xmlSchemaIDCSelect: - * - * The identity-constraint "field" and "selector" item, holding the - * XPath expression. - */ -typedef struct _xmlSchemaIDCSelect xmlSchemaIDCSelect; -typedef xmlSchemaIDCSelect *xmlSchemaIDCSelectPtr; -struct _xmlSchemaIDCSelect { - xmlSchemaIDCSelectPtr next; - xmlSchemaIDCPtr idc; - int index; - /* an index position if significant for IDC key-sequences */ - const xmlChar *xpath; - /* the XPath expression */ - void *xpathComp; /* the compiled XPath expression */ -}; - -/** - * xmlSchemaIDC: - * - * The identity-constraint definition component. - * (Extends xmlSchemaAnnotItem) - */ - -struct _xmlSchemaIDC { - xmlSchemaTypeType type; - xmlSchemaAnnotPtr annot; - xmlSchemaIDCPtr next; - xmlNodePtr node; - const xmlChar *name; - const xmlChar *targetNamespace; - xmlSchemaIDCSelectPtr selector; - xmlSchemaIDCSelectPtr fields; - int nbFields; - xmlSchemaQNameRefPtr ref; -}; - -/** - * xmlSchemaIDCAug: - * - * The augmented IDC information used for validation. - */ -typedef struct _xmlSchemaIDCAug xmlSchemaIDCAug; -typedef xmlSchemaIDCAug *xmlSchemaIDCAugPtr; -struct _xmlSchemaIDCAug { - xmlSchemaIDCAugPtr next; - /* next in a list */ - xmlSchemaIDCPtr def; - /* the IDC definition */ - int keyrefDepth; /* the lowest tree level to which IDC - tables need to be bubbled upwards */ -}; - -/** - * xmlSchemaPSVIIDCKeySequence: - * - * The key sequence of a node table item. - */ -typedef struct _xmlSchemaPSVIIDCKey xmlSchemaPSVIIDCKey; -typedef xmlSchemaPSVIIDCKey *xmlSchemaPSVIIDCKeyPtr; -struct _xmlSchemaPSVIIDCKey { - xmlSchemaTypePtr type; - xmlSchemaValPtr val; -}; - -/** - * xmlSchemaPSVIIDCNode: - * - * The node table item of a node table. - */ -typedef struct _xmlSchemaPSVIIDCNode xmlSchemaPSVIIDCNode; -typedef xmlSchemaPSVIIDCNode *xmlSchemaPSVIIDCNodePtr; -struct _xmlSchemaPSVIIDCNode { - xmlNodePtr node; - xmlSchemaPSVIIDCKeyPtr *keys; - int nodeLine; - int nodeQNameID; - -}; - -/** - * xmlSchemaPSVIIDCBinding: - * - * The identity-constraint binding item of the [identity-constraint table]. - */ -typedef struct _xmlSchemaPSVIIDCBinding xmlSchemaPSVIIDCBinding; -typedef xmlSchemaPSVIIDCBinding *xmlSchemaPSVIIDCBindingPtr; -struct _xmlSchemaPSVIIDCBinding { - xmlSchemaPSVIIDCBindingPtr next; - /* next binding of a specific node */ - xmlSchemaIDCPtr definition; - /* the IDC definition */ - xmlSchemaPSVIIDCNodePtr *nodeTable; - /* array of key-sequences */ - int nbNodes; - /* number of entries in the node table */ - int sizeNodes; - /* size of the node table */ - xmlSchemaItemListPtr dupls; -}; - - -#define XPATH_STATE_OBJ_TYPE_IDC_SELECTOR 1 -#define XPATH_STATE_OBJ_TYPE_IDC_FIELD 2 - -#define XPATH_STATE_OBJ_MATCHES -2 -#define XPATH_STATE_OBJ_BLOCKED -3 - -typedef struct _xmlSchemaIDCMatcher xmlSchemaIDCMatcher; -typedef xmlSchemaIDCMatcher *xmlSchemaIDCMatcherPtr; - -/** - * xmlSchemaIDCStateObj: - * - * The state object used to evaluate XPath expressions. - */ -typedef struct _xmlSchemaIDCStateObj xmlSchemaIDCStateObj; -typedef xmlSchemaIDCStateObj *xmlSchemaIDCStateObjPtr; -struct _xmlSchemaIDCStateObj { - int type; - xmlSchemaIDCStateObjPtr next; - /* next if in a list */ - int depth; - /* depth of creation */ - int *history; - /* list of (depth, state-id) tuples */ - int nbHistory; - int sizeHistory; - xmlSchemaIDCMatcherPtr matcher; - /* the correspondent field/selector - matcher */ - xmlSchemaIDCSelectPtr sel; - void *xpathCtxt; -}; - -#define IDC_MATCHER 0 - -/** - * xmlSchemaIDCMatcher: - * - * Used to evaluate IDC selectors (and fields). - */ -struct _xmlSchemaIDCMatcher { - int type; - int depth; - /* the tree depth at creation time */ - xmlSchemaIDCMatcherPtr next; - /* next in the list */ - xmlSchemaIDCMatcherPtr nextCached; - /* next in the cache list */ - xmlSchemaIDCAugPtr aidc; - /* the augmented IDC item */ - int idcType; - xmlSchemaPSVIIDCKeyPtr **keySeqs; - /* the key-sequences of the target - elements */ - int sizeKeySeqs; - xmlSchemaItemListPtr targets; /* list of target-node - (xmlSchemaPSVIIDCNodePtr) entries */ -}; - -/* -* Element info flags. -*/ -#define XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES 1<<0 -#define XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES 1<<1 -#define XML_SCHEMA_ELEM_INFO_NILLED 1<<2 -#define XML_SCHEMA_ELEM_INFO_LOCAL_TYPE 1<<3 - -#define XML_SCHEMA_NODE_INFO_VALUE_NEEDED 1<<4 -#define XML_SCHEMA_ELEM_INFO_EMPTY 1<<5 -#define XML_SCHEMA_ELEM_INFO_HAS_CONTENT 1<<6 - -#define XML_SCHEMA_ELEM_INFO_HAS_ELEM_CONTENT 1<<7 -#define XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT 1<<8 -#define XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED 1<<9 -#define XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE 1<<10 - -/** - * xmlSchemaNodeInfo: - * - * Holds information of an element node. - */ -struct _xmlSchemaNodeInfo { - int nodeType; - xmlNodePtr node; - int nodeLine; - const xmlChar *localName; - const xmlChar *nsName; - const xmlChar *value; - xmlSchemaValPtr val; - /* the pre-computed value if any */ - xmlSchemaTypePtr typeDef; - /* the complex/simple type definition if any */ - - int flags; - /* combination of node info flags */ - - int valNeeded; - int normVal; - - xmlSchemaElementPtr decl; - /* the element/attribute declaration */ - int depth; - xmlSchemaPSVIIDCBindingPtr idcTable; - /* the table of PSVI IDC bindings - for the scope element*/ - xmlSchemaIDCMatcherPtr idcMatchers; - /* the IDC matchers for the scope - element */ - xmlRegExecCtxtPtr regexCtxt; - - const xmlChar **nsBindings; - /* Namespace bindings on this element */ - int nbNsBindings; - int sizeNsBindings; - - int hasKeyrefs; - int appliedXPath; /* Indicates that an XPath has been applied. */ -}; - -#define XML_SCHEMAS_ATTR_UNKNOWN 1 -#define XML_SCHEMAS_ATTR_ASSESSED 2 -#define XML_SCHEMAS_ATTR_PROHIBITED 3 -#define XML_SCHEMAS_ATTR_ERR_MISSING 4 -#define XML_SCHEMAS_ATTR_INVALID_VALUE 5 -#define XML_SCHEMAS_ATTR_ERR_NO_TYPE 6 -#define XML_SCHEMAS_ATTR_ERR_FIXED_VALUE 7 -#define XML_SCHEMAS_ATTR_DEFAULT 8 -#define XML_SCHEMAS_ATTR_VALIDATE_VALUE 9 -#define XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL 10 -#define XML_SCHEMAS_ATTR_HAS_ATTR_USE 11 -#define XML_SCHEMAS_ATTR_HAS_ATTR_DECL 12 -#define XML_SCHEMAS_ATTR_WILD_SKIP 13 -#define XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL 14 -#define XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_ID 15 -#define XML_SCHEMAS_ATTR_ERR_WILD_AND_USE_ID 16 -#define XML_SCHEMAS_ATTR_META 17 -/* -* @metaType values of xmlSchemaAttrInfo. -*/ -#define XML_SCHEMA_ATTR_INFO_META_XSI_TYPE 1 -#define XML_SCHEMA_ATTR_INFO_META_XSI_NIL 2 -#define XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC 3 -#define XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC 4 -#define XML_SCHEMA_ATTR_INFO_META_XMLNS 5 - -typedef struct _xmlSchemaAttrInfo xmlSchemaAttrInfo; -typedef xmlSchemaAttrInfo *xmlSchemaAttrInfoPtr; -struct _xmlSchemaAttrInfo { - int nodeType; - xmlNodePtr node; - int nodeLine; - const xmlChar *localName; - const xmlChar *nsName; - const xmlChar *value; - xmlSchemaValPtr val; - /* the pre-computed value if any */ - xmlSchemaTypePtr typeDef; - /* the complex/simple type definition if any */ - int flags; - /* combination of node info flags */ - - xmlSchemaAttributePtr decl; - /* the attribute declaration */ - xmlSchemaAttributeUsePtr use; - /* the attribute use */ - int state; - int metaType; - const xmlChar *vcValue; - /* the value constraint value */ - xmlSchemaNodeInfoPtr parent; -}; - - -#define XML_SCHEMA_VALID_CTXT_FLAG_STREAM 1 -/** - * xmlSchemaValidCtxt: - * - * A Schemas validation context - */ -struct _xmlSchemaValidCtxt { - int type; - void *errCtxt; - /* user specific data block */ - xmlSchemaValidityErrorFunc error; - /* the callback in case of errors */ - xmlSchemaValidityWarningFunc warning; - /* the callback in case of warning */ - xmlStructuredErrorFunc serror; - - xmlSchemaPtr schema; - /* The schema in use */ - xmlDocPtr doc; - xmlParserInputBufferPtr input; - xmlCharEncoding enc; - xmlSAXHandlerPtr sax; - xmlParserCtxtPtr parserCtxt; - void *user_data; - /* TODO: What is this for? */ - - int err; - int nberrors; - - xmlNodePtr node; - xmlNodePtr cur; - /* xmlSchemaTypePtr type; */ - - xmlRegExecCtxtPtr regexp; - xmlSchemaValPtr value; - - int valueWS; - int options; - xmlNodePtr validationRoot; - xmlSchemaParserCtxtPtr pctxt; - int xsiAssemble; - - int depth; - xmlSchemaNodeInfoPtr *elemInfos; - /* array of element informations */ - int sizeElemInfos; - xmlSchemaNodeInfoPtr inode; - /* the current element information */ - - xmlSchemaIDCAugPtr aidcs; - /* a list of augmented IDC informations */ - - xmlSchemaIDCStateObjPtr xpathStates; - /* first active state object. */ - xmlSchemaIDCStateObjPtr xpathStatePool; - /* first stored state object. */ - xmlSchemaIDCMatcherPtr idcMatcherCache; - /* Cache for IDC matcher objects. */ - - xmlSchemaPSVIIDCNodePtr *idcNodes; - /* list of all IDC node-table entries*/ - int nbIdcNodes; - int sizeIdcNodes; - - xmlSchemaPSVIIDCKeyPtr *idcKeys; - /* list of all IDC node-table entries */ - int nbIdcKeys; - int sizeIdcKeys; - - int flags; - - xmlDictPtr dict; - -#ifdef LIBXML_READER_ENABLED - xmlTextReaderPtr reader; -#endif - - xmlSchemaAttrInfoPtr *attrInfos; - int nbAttrInfos; - int sizeAttrInfos; - - int skipDepth; - xmlSchemaItemListPtr nodeQNames; - int hasKeyrefs; - int createIDCNodeTables; - int psviExposeIDCNodeTables; -}; - -/** - * xmlSchemaSubstGroup: - * - * - */ -typedef struct _xmlSchemaSubstGroup xmlSchemaSubstGroup; -typedef xmlSchemaSubstGroup *xmlSchemaSubstGroupPtr; -struct _xmlSchemaSubstGroup { - xmlSchemaElementPtr head; - xmlSchemaItemListPtr members; -}; +#define QNIL_OR_STRING(slot) \ + (slot == NULL) ? Qnil : rb_str_new2((const char *)slot) -/*static xmlSchemaQNameRefPtr - xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt, - xmlSchemaPtr schema, - xmlNodePtr node);*/ +extern VALUE cXMLSchema; +void rxml_init_schema(void); #endif diff --git a/ext/libxml/ruby_xml_schema_attribute.c b/ext/libxml/ruby_xml_schema_attribute.c index 6238d86..aabb10c 100644 --- a/ext/libxml/ruby_xml_schema_attribute.c +++ b/ext/libxml/ruby_xml_schema_attribute.c @@ -2,6 +2,52 @@ #include "ruby_xml_schema_attribute.h" #include "ruby_xml_schema_type.h" +/** + * xmlSchemaBasicItem: + * + * The abstract base type for schema components. + */ +typedef struct _xmlSchemaBasicItem xmlSchemaBasicItem; +typedef xmlSchemaBasicItem *xmlSchemaBasicItemPtr; +struct _xmlSchemaBasicItem { + xmlSchemaTypeType type; +}; + +/** + * xmlSchemaQNameRef: + * + * A component reference item (not a schema component) + * (Extends xmlSchemaBasicItem) + */ +typedef struct _xmlSchemaQNameRef xmlSchemaQNameRef; +typedef xmlSchemaQNameRef *xmlSchemaQNameRefPtr; +struct _xmlSchemaQNameRef { + xmlSchemaTypeType type; + xmlSchemaBasicItemPtr item; + /* The resolved referenced item. */ + xmlSchemaTypeType itemType; + const xmlChar *name; + const xmlChar *targetNamespace; + xmlNodePtr node; +}; + +/** + * xmlSchemaAttributeUseProhibPtr: + * + * A helper component to reflect attribute prohibitions. + * (Extends xmlSchemaBasicItem) + */ +typedef struct _xmlSchemaAttributeUseProhib xmlSchemaAttributeUseProhib; +typedef xmlSchemaAttributeUseProhib *xmlSchemaAttributeUseProhibPtr; +struct _xmlSchemaAttributeUseProhib { + xmlSchemaTypeType type; + /* == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB */ + xmlNodePtr node; + const xmlChar *name; + const xmlChar *targetNamespace; + int isRef; +}; + VALUE cXMLSchemaAttribute; static void rxml_schema_attribute_free(xmlSchemaAttributeUsePtr attr) diff --git a/ext/libxml/ruby_xml_schema_attribute.h b/ext/libxml/ruby_xml_schema_attribute.h index 03570e1..b542905 100644 --- a/ext/libxml/ruby_xml_schema_attribute.h +++ b/ext/libxml/ruby_xml_schema_attribute.h @@ -2,12 +2,34 @@ #define __RXML_SCHEMA_ATTRIBUTE__ #include "ruby_xml_schema.h" -#include -#include -#include extern VALUE cXMLSchemaAttribute; +/** + * xmlSchemaAttributeUsePtr: + * + * The abstract base type for tree-like structured schema components. + * (Extends xmlSchemaTreeItem) + */ +typedef struct _xmlSchemaAttributeUse xmlSchemaAttributeUse; +typedef xmlSchemaAttributeUse *xmlSchemaAttributeUsePtr; +struct _xmlSchemaAttributeUse { + xmlSchemaTypeType type; + xmlSchemaAnnotPtr annot; + xmlSchemaAttributeUsePtr next; /* The next attr. use. */ + /* + * The attr. decl. OR a QName-ref. to an attr. decl. OR + * a QName-ref. to an attribute group definition. + */ + xmlSchemaAttributePtr attrDecl; + + int flags; + xmlNodePtr node; + int occurs; + /* required, optional */ + const xmlChar *defValue; + xmlSchemaValPtr defVal; +}; void rxml_init_schema_attribute(void); VALUE rxml_wrap_schema_attribute(xmlSchemaAttributeUsePtr attr); diff --git a/ext/libxml/ruby_xml_schema_element.h b/ext/libxml/ruby_xml_schema_element.h index 9d39078..9ff3e75 100644 --- a/ext/libxml/ruby_xml_schema_element.h +++ b/ext/libxml/ruby_xml_schema_element.h @@ -2,9 +2,6 @@ #define __RXML_SCHEMA_ELEMENT__ #include "ruby_xml_schema.h" -#include -#include -#include extern VALUE cXMLSchemaElement; diff --git a/ext/libxml/ruby_xml_schema_facet.c b/ext/libxml/ruby_xml_schema_facet.c index 9574797..a790b28 100644 --- a/ext/libxml/ruby_xml_schema_facet.c +++ b/ext/libxml/ruby_xml_schema_facet.c @@ -1,6 +1,10 @@ #include "ruby_libxml.h" #include "ruby_xml_schema_facet.h" +#include +#include +#include + VALUE cXMLSchemaFacet; static void rxml_schema_facet_free(xmlSchemaFacetPtr xschema_type) diff --git a/ext/libxml/ruby_xml_schema_facet.h b/ext/libxml/ruby_xml_schema_facet.h index 569f251..f534f79 100644 --- a/ext/libxml/ruby_xml_schema_facet.h +++ b/ext/libxml/ruby_xml_schema_facet.h @@ -1,10 +1,6 @@ #ifndef __RXML_SCHEMA_FACET__ #define __RXML_SCHEMA_FACET__ -#include -#include -#include - extern VALUE cXMLSchemaFacet; VALUE rxml_wrap_schema_facet(xmlSchemaFacetPtr facet); diff --git a/ext/libxml/ruby_xml_schema_type.c b/ext/libxml/ruby_xml_schema_type.c index 5a34b71..a6113a4 100644 --- a/ext/libxml/ruby_xml_schema_type.c +++ b/ext/libxml/ruby_xml_schema_type.c @@ -7,6 +7,43 @@ #define UNBOUNDED 1 << 30 #define FREE_AND_NULL(str) if ((str) != NULL) { xmlFree((xmlChar *) (str)); str = NULL; } +/** + * xmlSchemaTreeItem: + * + * The abstract base type for tree-like structured schema components. + * (Extends xmlSchemaAnnotItem) + */ +typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem; +typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr; +struct _xmlSchemaTreeItem { + xmlSchemaTypeType type; + xmlSchemaAnnotPtr annot; + xmlSchemaTreeItemPtr next; + xmlSchemaTreeItemPtr children; +}; + + /** + * xmlSchemaParticle: + * + * A particle component. + * (Extends xmlSchemaTreeItem) + */ +typedef struct _xmlSchemaParticle xmlSchemaParticle; +typedef xmlSchemaParticle *xmlSchemaParticlePtr; +struct _xmlSchemaParticle { + xmlSchemaTypeType type; + xmlSchemaAnnotPtr annot; + xmlSchemaTreeItemPtr next; + /* next particle */ + xmlSchemaTreeItemPtr children; + /* the "term" (e.g. a model group, +a group definition, a XML_SCHEMA_EXTRA_QNAMEREF (if a reference), + etc.) */ + int minOccurs; + int maxOccurs; + xmlNodePtr node; +}; + VALUE cXMLSchemaType; static void rxml_schema_type_free(xmlSchemaTypePtr xschema_type) diff --git a/ext/libxml/ruby_xml_writer.c b/ext/libxml/ruby_xml_writer.c index 68a706e..f3930ab 100644 --- a/ext/libxml/ruby_xml_writer.c +++ b/ext/libxml/ruby_xml_writer.c @@ -1,6 +1,10 @@ #include "ruby_libxml.h" #include "ruby_xml_writer.h" +#ifdef LIBXML_WRITER_ENABLED +#include +#endif + VALUE cXMLWriter; static VALUE sEncoding, sStandalone; diff --git a/ext/libxml/ruby_xml_writer.h b/ext/libxml/ruby_xml_writer.h index f9b2951..7319508 100644 --- a/ext/libxml/ruby_xml_writer.h +++ b/ext/libxml/ruby_xml_writer.h @@ -1,10 +1,6 @@ #ifndef __RXML_WRITER__ #define __RXML_WRITER__ -#ifdef LIBXML_WRITER_ENABLED -#include -#endif - extern VALUE cXMLWriter; void rxml_init_writer(void); #endif diff --git a/ext/libxml/ruby_xml_xinclude.c b/ext/libxml/ruby_xml_xinclude.c index fc4bb78..e2676fe 100644 --- a/ext/libxml/ruby_xml_xinclude.c +++ b/ext/libxml/ruby_xml_xinclude.c @@ -1,6 +1,10 @@ #include "ruby_libxml.h" #include "ruby_xml_xinclude.h" +#ifdef LIBXML_XINCLUDE_ENABLED +#include +#endif + VALUE cXMLXInclude; /* diff --git a/ext/libxml/ruby_xml_xpath.c b/ext/libxml/ruby_xml_xpath.c index 5f86c0b..3bfa199 100644 --- a/ext/libxml/ruby_xml_xpath.c +++ b/ext/libxml/ruby_xml_xpath.c @@ -75,6 +75,7 @@ */ #include "ruby_libxml.h" +#include VALUE mXPath; diff --git a/ext/libxml/ruby_xml_xpath.h b/ext/libxml/ruby_xml_xpath.h index b31ae86..0051ae7 100644 --- a/ext/libxml/ruby_xml_xpath.h +++ b/ext/libxml/ruby_xml_xpath.h @@ -3,6 +3,8 @@ #ifndef __RXML_XPATH__ #define __RXML_XPATH__ +#include + extern VALUE mXPath; void rxml_init_xpath(void); diff --git a/ext/libxml/ruby_xml_xpath_context.c b/ext/libxml/ruby_xml_xpath_context.c index 9b60c93..204cc2b 100644 --- a/ext/libxml/ruby_xml_xpath_context.c +++ b/ext/libxml/ruby_xml_xpath_context.c @@ -10,6 +10,8 @@ #include #endif +#include + /* * Document-class: LibXML::XML::XPath::Context * diff --git a/ext/libxml/ruby_xml_xpath_object.c b/ext/libxml/ruby_xml_xpath_object.c index 46892f8..4aeb02d 100644 --- a/ext/libxml/ruby_xml_xpath_object.c +++ b/ext/libxml/ruby_xml_xpath_object.c @@ -1,4 +1,5 @@ #include "ruby_libxml.h" +#include /* * Document-class: LibXML::XML::XPath::Object diff --git a/ext/libxml/ruby_xml_xpointer.c b/ext/libxml/ruby_xml_xpointer.c index 6f29945..11316f2 100644 --- a/ext/libxml/ruby_xml_xpointer.c +++ b/ext/libxml/ruby_xml_xpointer.c @@ -3,6 +3,10 @@ #include "ruby_libxml.h" #include "ruby_xml_xpointer.h" +#ifdef LIBXML_XPTR_ENABLED +#include +#endif + VALUE cXMLXPointer; /* @@ -62,7 +66,7 @@ VALUE rxml_xpointer_point2(VALUE node, VALUE xptr_str) */ static VALUE rxml_xpointer_range(VALUE class, VALUE rstart, VALUE rend) { -#ifdef LIBXML_XPTR_ENABLED +#if defined LIBXML_XPTR_ENABLED && defined LIBXML_XPTR_LOCS_ENABLED xmlNodePtr start, end; VALUE rxxp; xmlXPathObjectPtr xpath; diff --git a/lib/libxml-ruby.rb b/lib/libxml-ruby.rb index f9086c0..ea67b69 100644 --- a/lib/libxml-ruby.rb +++ b/lib/libxml-ruby.rb @@ -4,7 +4,7 @@ begin RUBY_VERSION =~ /(\d+.\d+)/ require "#{$1}/libxml_ruby" -rescue LoadError +rescue LoadError => e require "libxml_ruby" end diff --git a/test/test_helper.rb b/test/test_helper.rb index 1d4923c..bfc8ac1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -6,4 +6,8 @@ require 'bundler/setup' require 'minitest/autorun' require 'libxml-ruby' +def windows? + !(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/).nil? +end + STDOUT.write "\nlibxml2: #{LibXML::XML::LIBXML_VERSION}\n#{RUBY_DESCRIPTION}\n\n" diff --git a/test/test_xml.rb b/test/test_xml.rb index eb14e60..473e071 100644 --- a/test/test_xml.rb +++ b/test/test_xml.rb @@ -167,11 +167,19 @@ class TestXml < Minitest::Test end def test_enabled_docbook - assert(LibXML::XML.enabled_docbook?) + if windows? + refute(LibXML::XML.enabled_docbook?) + else + assert(LibXML::XML.enabled_docbook?) + end end def test_enabled_ftp - assert(LibXML::XML.enabled_ftp?) + if windows? + refute(LibXML::XML.enabled_ftp?) + else + assert(LibXML::XML.enabled_ftp?) + end end def test_enabled_http @@ -242,7 +250,11 @@ class TestXml < Minitest::Test end def test_libxml_parser_features - assert_instance_of(Array, LibXML::XML.features) + if windows? + assert_nil(LibXML::XML.features) + else + assert_instance_of(Array, LibXML::XML.features) + end end def test_default_options