This Trac instance is not used for development anymore!

We migrated our development workflow to git and Gitea.
To test the future redirection, replace trac by ariadne in the page URL.

Changeset 381 for ps


Ignore:
Timestamp:
06/03/04 15:20:36 (21 years ago)
Author:
Simon Brenner
Message:

Use the VFS Wrapper instead of Xerces' local file input. Use XMLCh/CStr
conversion functions from XML.h/XMLUtils.cpp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ps/trunk/source/graphics/ObjectEntry.cpp

    r364 r381  
    66#include "UnitManager.h"
    77
    8 // xerces XML stuff
    9 #include <xercesc/dom/DOM.hpp>
    10 #include <xercesc/parsers/XercesDOMParser.hpp>
    11 #include <xercesc/framework/LocalFileInputSource.hpp>
    12 #include <xercesc/util/XMLString.hpp>
    13 #include <xercesc/util/PlatformUtils.hpp>
    14 
    15 // Gee's custom error handler
    16 #include "ps/XercesErrorHandler.h"
     8#include "XML.h"
    179
    1810#ifdef _MSC_VER
     
    5951
    6052    // build filename
    61     CStr modelfilename("mods\\official\\");
     53    CStr modelfilename("mods/official/");
    6254    modelfilename+=m_ModelName;
    6355   
     
    6860        modeldef=CModelDef::Load((const char*) modelfilename);
    6961    } catch (...) {
     62        LOG(ERROR, "CObjectEntry::BuildModel(): Model %s failed to load\n", modelfilename.c_str());
    7063        return false;
    7164    }
     
    8477        if( m_Animations[t].m_FileName.Length() > 0 )
    8578        {
    86             CStr animfilename( "mods\\official\\" );
     79            CStr animfilename( "mods/official/" );
    8780            animfilename += m_Animations[t].m_FileName;
    8881            m_Animations[t].m_AnimData = m_Model->BuildAnimation((const char*) animfilename,m_Animations[t].m_Speed);
     
    153146}
    154147
    155 CStr Transcode(const XMLCh* xmltext)
    156 {
    157     char* str=XMLString::transcode(xmltext);
    158     CStr result(str);
    159     XMLString::release(&str);
    160     return result;
    161 }
    162 
    163148bool CObjectEntry::Load(const char* filename)
    164149{
     
    187172        CXercesErrorHandler *errorHandler = new CXercesErrorHandler();
    188173        parser->setErrorHandler(errorHandler);
     174       
     175        CVFSEntityResolver *entityResolver = new CVFSEntityResolver(filename);
     176        parser->setEntityResolver(entityResolver);
    189177
    190178        // Push the CLogger to mark it's reading this file.
    191179
    192180        // Get main node
    193         XMLCh* xfilename=XMLString::transcode(filename);
    194         LocalFileInputSource source(xfilename);
    195         XMLString::release(&xfilename);
    196 
    197         // Parse file
    198         parser->parse(source);
    199 
    200         // Check how many errors
    201         parseOK = parser->getErrorCount() == 0;
    202 
     181        CVFSInputSource source;
     182        parseOK = source.OpenFile(filename) == 0;
     183        if (parseOK)
     184        {
     185            // Parse file
     186            parser->parse(source);
     187
     188            // Check how many errors
     189            parseOK = parser->getErrorCount() == 0;
     190        }
    203191        if (parseOK) {
    204192            // parsed successfully - grab our data
     
    207195
    208196            // root_name should be Object
    209             CStr root_name = Transcode( element->getNodeName() );
     197            CStr root_name = XMLTranscode( element->getNodeName() );
    210198
    211199            // should have at least 3 children - Name, ModelName and TextureName
     
    222210                    DOMElement *child_element = (DOMElement*)child;
    223211
    224                     CStr element_name = Transcode( child_element->getNodeName() );
     212                    CStr element_name = XMLTranscode( child_element->getNodeName() );
    225213                    DOMNode *value_node= child_element->getChildNodes()->item(0);
    226                     CStr element_value=value_node ? Transcode(value_node->getNodeValue()) : "";
     214                    CStr element_value=value_node ? XMLTranscode(value_node->getNodeValue()) : "";
    227215
    228216                    if (element_name==CStr("Name")) {
     
    237225                        for (uint j=0; j<animations->getLength(); ++j) {
    238226                            DOMElement *anim_element = (DOMElement*) animations->item(j);
    239                             CStr element_name = Transcode( anim_element->getNodeName() );
     227                            CStr element_name = XMLTranscode( anim_element->getNodeName() );
    240228                            DOMNamedNodeMap* attributes=anim_element->getAttributes();
    241229                            if (attributes) {
     
    243231
    244232                                DOMNode *nameattr=attributes->getNamedItem(nametext);
    245                                 anim.m_AnimName=Transcode(nameattr->getChildNodes()->item(0)->getNodeValue());
     233                                anim.m_AnimName=XMLTranscode(nameattr->getChildNodes()->item(0)->getNodeValue());
    246234                                DOMNode *fileattr=attributes->getNamedItem(filetext);
    247                                 anim.m_FileName=Transcode(fileattr->getChildNodes()->item(0)->getNodeValue());
     235                                anim.m_FileName=XMLTranscode(fileattr->getChildNodes()->item(0)->getNodeValue());
    248236                               
    249237                                DOMNode *speedattr=attributes->getNamedItem(speedtext);
    250                                 CStr speedstr=Transcode(speedattr->getChildNodes()->item(0)->getNodeValue());           
     238                                CStr speedstr=XMLTranscode(speedattr->getChildNodes()->item(0)->getNodeValue());           
    251239
    252240                                anim.m_Speed=float(atoi((const char*) speedstr))/100.0f;
     
    261249                        for (uint j=0; j<props->getLength(); ++j) {
    262250                            DOMElement *prop_element = (DOMElement*) props->item(j);
    263                             CStr element_name = Transcode( prop_element->getNodeName() );
     251                            CStr element_name = XMLTranscode( prop_element->getNodeName() );
    264252                            DOMNamedNodeMap* attributes=prop_element->getAttributes();
    265253                            if (attributes) {
     
    267255
    268256                                DOMNode *nameattr=attributes->getNamedItem(attachpointtext);
    269                                 prop.m_PropPointName=Transcode(nameattr->getChildNodes()->item(0)->getNodeValue());
     257                                prop.m_PropPointName=XMLTranscode(nameattr->getChildNodes()->item(0)->getNodeValue());
    270258                                DOMNode *modelattr=attributes->getNamedItem(modeltext);
    271259                                prop.m_ModelName=XMLString::transcode(modelattr->getChildNodes()->item(0)->getNodeValue());
     
    287275        delete parser;
    288276        delete errorHandler;
     277        delete entityResolver;
    289278    }
    290279    XMLPlatformUtils::Terminate();
     
    300289    // write XML header
    301290    fprintf(fp,"<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>\n\n");
    302     fprintf(fp,"<!DOCTYPE Object SYSTEM \"..\\object.dtd\">\n\n");
     291    fprintf(fp,"<!DOCTYPE Object SYSTEM \"../object.dtd\">\n\n");
    303292
    304293    // write the object itself
Note: See TracChangeset for help on using the changeset viewer.