updated COLLADA-DOM to the latest bleeding-edge (1.4.1) SVN version of today
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include <libxml/xmlreader.h>
|
||||
#include <libxml/xmlmemory.h>
|
||||
#include <dae/daeErrorHandler.h>
|
||||
#include <dae/daeMetaElementAttribute.h>
|
||||
|
||||
daeLIBXMLPlugin::daeLIBXMLPlugin():topMeta(NULL),database(NULL)
|
||||
{
|
||||
@@ -107,7 +108,9 @@ daeInt daeLIBXMLPlugin::read(daeURI& uri, daeString docBuffer)
|
||||
|
||||
if(!reader)
|
||||
{
|
||||
printf( "no libxml2 reader\n");
|
||||
char msg[512];
|
||||
sprintf( msg, "Failed to open %s\n", fileURI.getURI() );
|
||||
daeErrorHandler::get()->handleError( msg );
|
||||
return DAE_ERR_BACKEND_IO;
|
||||
}
|
||||
|
||||
@@ -121,12 +124,9 @@ daeInt daeLIBXMLPlugin::read(daeURI& uri, daeString docBuffer)
|
||||
|
||||
if (!domObject)
|
||||
{
|
||||
#if defined(_DEBUG) && defined(WIN32)
|
||||
fprintf(stderr,"daeLIBXMLPlugin::read(%s) failed - XML Parse Failed\n",
|
||||
fileURI.getFile());
|
||||
fflush(stdout);
|
||||
#endif
|
||||
printf("not able to load\n");
|
||||
char msg[512];
|
||||
sprintf(msg,"daeLIBXMLPlugin::read(%s) failed - XML Parse Failed\n",fileURI.getFile());
|
||||
daeErrorHandler::get()->handleError( msg );
|
||||
return DAE_ERR_BACKEND_IO;
|
||||
}
|
||||
|
||||
@@ -198,8 +198,8 @@ daeLIBXMLPlugin::startParse(daeMetaElement* thisMetaElement, xmlTextReaderPtr re
|
||||
daeElementRef element = thisMetaElement->create((const daeString)xmlTextReaderConstName(reader));
|
||||
if(!element)
|
||||
{
|
||||
char err[256];
|
||||
memset( err, 0, 256 );
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
const xmlChar * mine =xmlTextReaderConstName(reader);
|
||||
#if LIBXML_VERSION >= 20620
|
||||
sprintf(err,"The DOM was unable to create an element type %s at line %d\nProbably a schema violation.\n", mine,xmlTextReaderGetParserLineNumber(reader));
|
||||
@@ -215,6 +215,7 @@ daeLIBXMLPlugin::startParse(daeMetaElement* thisMetaElement, xmlTextReaderPtr re
|
||||
//try and read attributes
|
||||
readAttributes( element, reader );
|
||||
|
||||
#if 1
|
||||
//Check COLLADA Version
|
||||
if ( strcmp( element->getTypeName(), "COLLADA" ) != 0 ) {
|
||||
//invalid root
|
||||
@@ -227,6 +228,7 @@ daeLIBXMLPlugin::startParse(daeMetaElement* thisMetaElement, xmlTextReaderPtr re
|
||||
daeErrorHandler::get()->handleError("Trying to load an invalid COLLADA version for this DOM build!");
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
ret = xmlTextReaderRead(reader);
|
||||
@@ -253,8 +255,8 @@ daeLIBXMLPlugin::startParse(daeMetaElement* thisMetaElement, xmlTextReaderPtr re
|
||||
// The element is a child of this one, so we recurse
|
||||
if(!element->placeElement(nextElement(element->getMeta(), reader)))
|
||||
{
|
||||
char err[256];
|
||||
memset( err, 0, 256 );
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
#if LIBXML_VERSION >= 20620
|
||||
sprintf(err,"placeElement failed at line %d\n", xmlTextReaderGetParserLineNumber(reader));
|
||||
#else
|
||||
@@ -307,8 +309,8 @@ void daeLIBXMLPlugin::readAttributes( daeElement *element, xmlTextReaderPtr read
|
||||
{
|
||||
const xmlChar * attName = xmlTextReaderConstName(reader);
|
||||
const xmlChar * attValue = xmlTextReaderConstValue(reader);
|
||||
char err[256];
|
||||
memset( err, 0, 256 );
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
#if LIBXML_VERSION >= 20620
|
||||
sprintf(err,"The DOM was unable to create an attribute %s = %s at line %d\nProbably a schema violation.\n", attName, attValue ,xmlTextReaderGetParserLineNumber(reader));
|
||||
#else
|
||||
@@ -325,8 +327,8 @@ void daeLIBXMLPlugin::readAttributes( daeElement *element, xmlTextReaderPtr read
|
||||
if ( ma == NULL ) {
|
||||
const xmlChar * attName = xmlTextReaderConstName(reader);
|
||||
const xmlChar * attValue = xmlTextReaderConstValue(reader);
|
||||
char err[256];
|
||||
memset( err, 0, 256 );
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
#if LIBXML_VERSION >= 20620
|
||||
sprintf(err,"The DOM was unable to create an attribute %s = %s at line %d\nProbably a schema violation.\n", attName, attValue ,xmlTextReaderGetParserLineNumber(reader));
|
||||
#else
|
||||
@@ -356,8 +358,8 @@ void daeLIBXMLPlugin::readAttributes( daeElement *element, xmlTextReaderPtr read
|
||||
{
|
||||
const xmlChar * attName = xmlTextReaderConstName(reader);
|
||||
const xmlChar * attValue = xmlTextReaderConstValue(reader);
|
||||
char err[256];
|
||||
memset( err, 0, 256 );
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
#if LIBXML_VERSION >= 20620
|
||||
sprintf(err,"The DOM was unable to create an attribute %s = %s at line %d\nProbably a schema violation.\n", attName, attValue ,xmlTextReaderGetParserLineNumber(reader));
|
||||
#else
|
||||
@@ -375,8 +377,8 @@ void daeLIBXMLPlugin::readAttributes( daeElement *element, xmlTextReaderPtr read
|
||||
|
||||
void daeLIBXMLPlugin::readValue( daeElement *element, xmlTextReaderPtr reader ) {
|
||||
if ( element->getMeta()->getValueAttribute() == NULL ) {
|
||||
char err[256];
|
||||
memset( err, 0, 256 );
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
#if LIBXML_VERSION >= 20620
|
||||
sprintf(err,"The DOM was unable to set a value for element of type %s at line %d\nProbably a schema violation.\n", element->getTypeName() ,xmlTextReaderGetParserLineNumber(reader));
|
||||
#else
|
||||
@@ -441,17 +443,15 @@ daeLIBXMLPlugin::nextElement(daeMetaElement* thisMetaElement, xmlTextReaderPtr r
|
||||
if(!element)
|
||||
{
|
||||
const xmlChar * mine =xmlTextReaderConstName(reader);
|
||||
char err[256];
|
||||
memset( err, 0, 256 );
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
#if LIBXML_VERSION >= 20620
|
||||
sprintf(err,"The DOM was unable to create an element type %s at line %d\nProbably a schema violation.\n", mine,xmlTextReaderGetParserLineNumber(reader));
|
||||
#else
|
||||
sprintf(err,"The DOM was unable to create an element type %s\nProbably a schema violation.\n", mine);
|
||||
#endif
|
||||
daeErrorHandler::get()->handleWarning( err );
|
||||
if ( xmlTextReaderNext(reader) == -1 ) {
|
||||
int x = 12312412;
|
||||
}
|
||||
xmlTextReaderNext(reader);
|
||||
return NULL;
|
||||
}
|
||||
int currentDepth = xmlTextReaderDepth(reader);
|
||||
@@ -481,20 +481,17 @@ daeLIBXMLPlugin::nextElement(daeMetaElement* thisMetaElement, xmlTextReaderPtr r
|
||||
else
|
||||
{
|
||||
// The element is a child of this one, so we recurse
|
||||
if(!element->placeElement(nextElement(element->getMeta(), reader)))
|
||||
daeElementRef newEl = nextElement(element->getMeta(), reader);
|
||||
if( newEl != NULL && !element->placeElement(newEl) )
|
||||
{
|
||||
char err[256];
|
||||
memset( err, 0, 256 );
|
||||
#if LIBXML_VERSION >= 20620
|
||||
sprintf(err,"placeElement failed at line %d\n", xmlTextReaderGetParserLineNumber(reader));
|
||||
#else
|
||||
sprintf(err,"placeElement failed\n");
|
||||
#endif
|
||||
daeErrorHandler::get()->handleWarning( err );
|
||||
ret = xmlTextReaderRead(reader);
|
||||
if ( ret != 1 ) {
|
||||
return element;
|
||||
}
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
sprintf(err,"placeElement failed placing element %s in element %s\n", newEl->getTypeName(), element->getTypeName() );
|
||||
daeErrorHandler::get()->handleWarning( err );
|
||||
ret = xmlTextReaderRead(reader);
|
||||
if ( ret != 1 ) {
|
||||
return element;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -528,7 +525,7 @@ void daeLIBXMLPlugin::postProcessDom(daeDocument *document, daeElement* element,
|
||||
if (!element)
|
||||
return;
|
||||
|
||||
element->setDocument(document);
|
||||
//element->setDocument(document);
|
||||
// If this element has an integration object, add it to a list so we can process them all in a bunch later
|
||||
|
||||
if (element->getIntObject(daeElement::int_uninitialized))
|
||||
@@ -540,8 +537,13 @@ void daeLIBXMLPlugin::postProcessDom(daeDocument *document, daeElement* element,
|
||||
}
|
||||
|
||||
// Recursively call postProcessDom on all of this element's children
|
||||
|
||||
if (element->getMeta()->getContents() != NULL) {
|
||||
daeElementRefArray children;
|
||||
element->getChildren( children );
|
||||
for ( size_t x = 0; x < children.getCount(); x++ ) {
|
||||
postProcessDom(document, children.get(x), intItems);
|
||||
}
|
||||
|
||||
/*if (element->getMeta()->getContents() != NULL) {
|
||||
daeMetaElementArrayAttribute *contents = element->getMeta()->getContents();
|
||||
for ( int i = 0; i < contents->getCount( element ); i++ ) {
|
||||
//array.append( *(daeElementRef*)contents->get( this, i ) );
|
||||
@@ -564,8 +566,9 @@ void daeLIBXMLPlugin::postProcessDom(daeDocument *document, daeElement* element,
|
||||
postProcessDom(document,elem, intItems);
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
daeInt daeLIBXMLPlugin::write(daeURI *name, daeDocument *document, daeBool replace)
|
||||
{
|
||||
// Make sure database and document are both set
|
||||
@@ -578,7 +581,7 @@ daeInt daeLIBXMLPlugin::write(daeURI *name, daeDocument *document, daeBool repla
|
||||
daeFixedName finalname;
|
||||
if (!name->getPath(finalname,sizeof(finalname)))
|
||||
{
|
||||
printf( "can't get path in write\n" );
|
||||
daeErrorHandler::get()->handleError( "can't get path in write\n" );
|
||||
return DAE_ERR_BACKEND_IO;
|
||||
}
|
||||
|
||||
@@ -598,7 +601,9 @@ daeInt daeLIBXMLPlugin::write(daeURI *name, daeDocument *document, daeBool repla
|
||||
// Open the file we will write to
|
||||
writer = xmlNewTextWriterFilename(name->getURI(), 0);
|
||||
if ( !writer ) {
|
||||
printf( "no libxml2 writer\n" );
|
||||
char msg[512];
|
||||
sprintf(msg,"daeLIBXMLPlugin::write(%s) failed\n",name->getURI());
|
||||
daeErrorHandler::get()->handleError( msg );
|
||||
return DAE_ERR_BACKEND_IO;
|
||||
}
|
||||
xmlChar indentString[10] = " ";
|
||||
@@ -636,14 +641,20 @@ void daeLIBXMLPlugin::writeElement( daeElement* element )
|
||||
int acnt = (int)attrs.getCount();
|
||||
|
||||
for(int i=0;i<acnt;i++) {
|
||||
writeAttribute( attrs[i], element);
|
||||
writeAttribute( attrs[i], element, i );
|
||||
}
|
||||
}
|
||||
daeMetaAttribute* valueAttr = _meta->getValueAttribute();
|
||||
if (valueAttr!=NULL)
|
||||
writeAttribute(valueAttr, element);
|
||||
|
||||
if (_meta->getContents() != NULL) {
|
||||
daeElementRefArray children;
|
||||
element->getChildren( children );
|
||||
for ( size_t x = 0; x < children.getCount(); x++ ) {
|
||||
writeElement( children.get(x) );
|
||||
}
|
||||
|
||||
/*if (_meta->getContents() != NULL) {
|
||||
daeElementRefArray* era = (daeElementRefArray*)_meta->getContents()->getWritableMemory(element);
|
||||
int elemCnt = (int)era->getCount();
|
||||
for(int i = 0; i < elemCnt; i++) {
|
||||
@@ -665,7 +676,7 @@ void daeLIBXMLPlugin::writeElement( daeElement* element )
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
if (!_meta->getIsTransparent() ) {
|
||||
xmlTextWriterEndElement(writer);
|
||||
}
|
||||
@@ -673,7 +684,7 @@ void daeLIBXMLPlugin::writeElement( daeElement* element )
|
||||
|
||||
#define TYPE_BUFFER_SIZE 4096
|
||||
|
||||
void daeLIBXMLPlugin::writeAttribute( daeMetaAttribute* attr, daeElement* element )
|
||||
void daeLIBXMLPlugin::writeAttribute( daeMetaAttribute* attr, daeElement* element, daeInt attrNum )
|
||||
{
|
||||
static daeChar atomicTypeBuf[TYPE_BUFFER_SIZE];
|
||||
|
||||
@@ -704,10 +715,11 @@ void daeLIBXMLPlugin::writeAttribute( daeMetaAttribute* attr, daeElement* elemen
|
||||
// DISABLE THIS CODE IF YOU WANT DEFAULT VALUES TO ALWAYS EXPORT
|
||||
if(typeSize >= TYPE_BUFFER_SIZE)
|
||||
{
|
||||
fprintf(stderr,
|
||||
char msg[512];
|
||||
sprintf(msg,
|
||||
"daeMetaAttribute::print() - buffer too small for default value of %s in %s\n",
|
||||
(daeString)attr->getName(),(daeString)attr->getContainer()->getName());
|
||||
fflush(stderr);
|
||||
daeErrorHandler::get()->handleError( msg );
|
||||
return;
|
||||
}
|
||||
attr->getType()->stringToMemory((daeChar*)attr->getDefault(),atomicTypeBuf);
|
||||
@@ -717,12 +729,12 @@ void daeLIBXMLPlugin::writeAttribute( daeMetaAttribute* attr, daeElement* elemen
|
||||
}
|
||||
else
|
||||
{
|
||||
#if 1
|
||||
#if 0
|
||||
// The attribute does not have a default, suppress it if its value is all zeros (binary)
|
||||
// DISABLE THIS CODE IF YOU WANT OPTIONAL ATTRIBUTES THAT HAVE A VALUE OF ZERO TO EXPORT
|
||||
// Disabling this code may cause some unused attributes to be exported if _isValid is not
|
||||
// enabled and properly used.
|
||||
int i;
|
||||
int i;
|
||||
for(i=0; i<typeSize;i++)
|
||||
{
|
||||
if(elemMem[i] != 0)
|
||||
@@ -733,16 +745,20 @@ void daeLIBXMLPlugin::writeAttribute( daeMetaAttribute* attr, daeElement* elemen
|
||||
attr->getType()->getTypeEnum() != daeAtomicType::EnumType )
|
||||
return;
|
||||
#endif
|
||||
if ( attrNum != -1 && !element->isAttributeSet( attr->getName() ) ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Convert the attribute to a string
|
||||
|
||||
if (attr->getType()->memoryToString(elemMem, atomicTypeBuf, TYPE_BUFFER_SIZE)== false) {
|
||||
fprintf(stderr,
|
||||
char msg[512];
|
||||
sprintf(msg,
|
||||
"daeMetaAttribute::print() - buffer too small for %s in %s\n",
|
||||
(daeString)attr->getName(),(daeString)attr->getContainer()->getName());
|
||||
fflush(stderr);
|
||||
daeErrorHandler::get()->handleError( msg );
|
||||
}
|
||||
|
||||
// Suppress attributes that convert to an empty string.
|
||||
@@ -782,10 +798,11 @@ void daeLIBXMLPlugin::writeAttribute( daeMetaAttribute* attr, daeElement* elemen
|
||||
char* elemMem = attr->get(element, i);
|
||||
if (attr->getType()->memoryToString(elemMem, atomicTypeBuf, TYPE_BUFFER_SIZE)== false)
|
||||
{
|
||||
fprintf(stderr,
|
||||
char msg[512];
|
||||
sprintf(msg,
|
||||
"daeMetaArrayAttribute::print() - buffer too small for %s in %s\n",
|
||||
(daeString)attr->getName(),(daeString)attr->getContainer()->getName());
|
||||
fflush(stderr);
|
||||
daeErrorHandler::get()->handleError( msg );
|
||||
}
|
||||
xmlTextWriterWriteFormatString( writer, "%s ", (xmlChar*)atomicTypeBuf );
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <dae/daeDatabase.h>
|
||||
#include <dae/daeURI.h>
|
||||
#include <modules/daeLIBXMLPlugin.h>
|
||||
#include <dae/daeErrorHandler.h>
|
||||
|
||||
daeLIBXMLResolver::daeLIBXMLResolver(daeDatabase* database,daeIOPlugin* plugin)
|
||||
{
|
||||
@@ -100,10 +101,11 @@ daeLIBXMLResolver::resolveElement(daeURI& uri, daeString typeNameHint)
|
||||
daeDocument *tempDocument;
|
||||
if ( tempElement == NULL || (tempDocument = tempElement->getDocument()) == NULL ) {
|
||||
uri.setState(daeURI::uri_failed_missing_container);
|
||||
fprintf(stderr,
|
||||
char msg[256];
|
||||
sprintf(msg,
|
||||
"daeLIBXMLResolver::resolveElement() - failed to resolve %s\n",
|
||||
uri.getURI());
|
||||
fflush(stderr);
|
||||
daeErrorHandler::get()->handleError( msg );
|
||||
return false;
|
||||
}
|
||||
//assert(tempDocument);
|
||||
@@ -119,10 +121,11 @@ daeLIBXMLResolver::resolveElement(daeURI& uri, daeString typeNameHint)
|
||||
if (status ||(resolved==NULL))
|
||||
{
|
||||
uri.setState(daeURI::uri_failed_id_not_found);
|
||||
fprintf(stderr,
|
||||
char msg[256];
|
||||
sprintf(msg,
|
||||
"daeLIBXMLResolver::resolveElement() - failed to resolve %s\n",
|
||||
uri.getURI());
|
||||
fflush(stderr);
|
||||
daeErrorHandler::get()->handleError( msg );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user