updated COLLADA-DOM to the latest bleeding-edge (1.4.1) SVN version of today

This commit is contained in:
ejcoumans
2006-07-26 18:58:09 +00:00
parent 750af5c197
commit 7038e5c736
353 changed files with 21354 additions and 6259 deletions

View File

@@ -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 );
}

View File

@@ -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;
}