void OptionsIO::loadConfiguration() { OptionsCont& oc = OptionsCont::getOptions(); if (!oc.exists("configuration-file") || !oc.isSet("configuration-file")) { return; } std::string path = oc.getString("configuration-file"); if (!FileHelpers::exists(path)) { throw ProcessError("Could not find configuration '" + oc.getString("configuration-file") + "'."); } PROGRESS_BEGIN_MESSAGE("Loading configuration"); // build parser SAXParser parser; parser.setValidationScheme(SAXParser::Val_Auto); parser.setDoNamespaces(false); parser.setDoSchema(false); // start the parsing OptionsLoader handler; try { parser.setDocumentHandler(&handler); parser.setErrorHandler(&handler); parser.parse(path.c_str()); if (handler.errorOccured()) { throw ProcessError("Could not load configuration '" + path + "'."); } } catch (const XMLException& e) { throw ProcessError("Could not load configuration '" + path + "':\n " + TplConvert<XMLCh>::_2str(e.getMessage())); } oc.relocateFiles(path); PROGRESS_DONE_MESSAGE(); }
VXIlogResult SBlogErrorMapper::InitializeXMLParser() { if( initialized ) return VXIlog_RESULT_SUCCESS; // Log to voiceglue if (voiceglue_loglevel() >= LOG_INFO) { std::ostringstream logstring; logstring << "SBlogMapper: XMLPlatformUtils::Initialize()"; voiceglue_log ((char) LOG_INFO, logstring); }; // Initialize the SAX parser try { XMLPlatformUtils::Initialize(); } catch (const XMLException& exception) { showExceptionMsg(exception); return VXIlog_RESULT_FAILURE; } initialized = 1; parser = new SAXParser(); //parser->setDoValidation(false); ausmarton parser->setValidationScheme(SAXParser::Val_Never); parser->setDoNamespaces(false); // Register our own handler class (callback) xmlHandler = new MySAXHandler(); ErrorHandler* errHandler = (ErrorHandler*) xmlHandler; parser->setDocumentHandler((DocumentHandler *)xmlHandler); parser->setErrorHandler(errHandler); return VXIlog_RESULT_SUCCESS; }
int InstallationParser::parse() { if (initialization() == 1) // Problem during the initialisation. return(1); SAXParser* parser = new SAXParser(); parser->setDoValidation(true); parser->setDoNamespaces(true); InstallationSAXHandler* handler = new InstallationSAXHandler(); parser->setDocumentHandler(handler); parser->setErrorHandler(handler); try { const char* file = xmlFile.c_str(); // Name of the descriptor file in the current directory. parser->parse(file); // Parsing procedure. handler->get_pkgname(pkgname); // Result of the parsing. handler->get_pkgUUID(pkgUUID); handler->get_implementations(codefiles); // Result of the parsing. } catch (const XMLException& toCatch) { // File not found for the parsing. std::cerr << "\nFile not found : '" << xmlFile << "'\n"; std::cerr << "Exception message is : \n" << toCatch.getMessage() << "\n"; return(4); } int err = handler->get_error(); // The error codes are got from the handler object. delete(handler); // Object deleted. delete(parser); // Object deleted. return(err); // 0, 2 or 3 is returned. }
// --------------------------------------------------------------------------- // SAX Parser // --------------------------------------------------------------------------- int TestInit4SAX(const char* xmlFile, bool gDoNamespaces, bool gDoSchema, bool gSchemaFullChecking, Teststate theState) { TESTINITPRE; SAXParser* parser = new SAXParser; parser->setDoNamespaces(gDoNamespaces); parser->setDoSchema(gDoSchema); parser->setValidationSchemaFullChecking(gSchemaFullChecking); TESTINITPOST; }
bool Kumu::XMLElement::ParseString(const char* document, ui32_t doc_len) { if ( doc_len == 0 ) return false; init_xml_dom(); int errorCount = 0; SAXParser* parser = new SAXParser(); parser->setValidationScheme(SAXParser::Val_Always); parser->setDoNamespaces(true); // optional MyTreeHandler* docHandler = new MyTreeHandler(this); parser->setDocumentHandler(docHandler); parser->setErrorHandler(docHandler); try { MemBufInputSource xmlSource(reinterpret_cast<const XMLByte*>(document), static_cast<const unsigned int>(doc_len), "pidc_rules_file"); parser->parse(xmlSource); } catch (const XMLException& e) { char* message = XMLString::transcode(e.getMessage()); DefaultLogSink().Error("Parser error: %s\n", message); XMLString::release(&message); errorCount++; } catch (const SAXParseException& e) { char* message = XMLString::transcode(e.getMessage()); DefaultLogSink().Error("Parser error: %s at line %d\n", message, e.getLineNumber()); XMLString::release(&message); errorCount++; } catch (...) { DefaultLogSink().Error("Unexpected XML parser error\n"); errorCount++; } if ( errorCount == 0 ) m_NamespaceOwner = (void*)docHandler->TakeNamespaceMap(); delete parser; delete docHandler; return errorCount > 0 ? false : true; }
/* Read the file. */ bool GQCFileData::Read(const std::string &fileName) { Clear(); // Initialize the XML4C2 system try { XMLPlatformUtils::Initialize(); } catch (const XMLException&) { return false; } bool status = false; SAXParser* parser = new SAXParser; parser->setValidationScheme(SAXParser::Val_Never); parser->setLoadExternalDTD(false); parser->setDoNamespaces(false); parser->setDoSchema(false); parser->setValidationSchemaFullChecking(false); SAXGenericReportHandlers handler(this); parser->setDocumentHandler(&handler); parser->setErrorHandler(&handler); try { parser->parse(fileName.c_str()); int errorCount = parser->getErrorCount(); if (errorCount == 0) { status = true; } } catch (...) { status = false; } delete parser; XMLPlatformUtils::Terminate(); return status; }
bool streamXML(const string& filename, XMLStream& stream) { try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cerr << "XML initialization failed: " << message << endl; return false; } SAXParser parser; parser.setDoValidation(true); // optional. parser.setDoNamespaces(true); // optional StreamHandler docHandler(stream); parser.setDocumentHandler(&docHandler); parser.setErrorHandler((ErrorHandler*)&docHandler); try { parser.parse(filename.c_str()); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cerr << "XML Exception: " << message << endl; return false; } catch (const SAXParseException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cerr << "XML Parsing exception: " << message << endl; return false; } catch (const SAXException& e) { char* message = XMLString::transcode(e.getMessage()); cerr << "Bad file format exception: " << message << endl; return false; } catch (...) { cerr << "Unexpected Exception \n" ; return false; } return true; }
int main (int argC, char *argV[]) { MemoryMonitor *staticMemMonitor = new MemoryMonitor(); // Initialize the XML4C system try { XMLPlatformUtils::Initialize(XMLUni::fgXercescDefaultLocale, 0, 0, staticMemMonitor); } catch (const XMLException& toCatch) { char *msg = XMLString::transcode(toCatch.getMessage()); XERCES_STD_QUALIFIER cerr << "Error during initialization! :\n" << msg << XERCES_STD_QUALIFIER endl; XMLString::release(&msg); return 1; } // Check command line and extract arguments. if (argC < 2) { usage(); return 1; } const char* xmlFile = 0; AbstractDOMParser::ValSchemes domBuilderValScheme = AbstractDOMParser::Val_Auto; bool doNamespaces = false; bool doSchema = false; bool schemaFullChecking = false; bool doList = false; int numReps =1; int argInd; for (argInd = 1; argInd < argC; argInd++) { // Break out on first parm not starting with a dash if (argV[argInd][0] != '-') break; // Watch for special case help request if (!strcmp(argV[argInd], "-?")) { usage(); return 2; } else if (!strncmp(argV[argInd], "-v=", 3) || !strncmp(argV[argInd], "-V=", 3)) { const char* const parm = &argV[argInd][3]; if (!strcmp(parm, "never")) domBuilderValScheme = AbstractDOMParser::Val_Never; else if (!strcmp(parm, "auto")) domBuilderValScheme = AbstractDOMParser::Val_Auto; else if (!strcmp(parm, "always")) domBuilderValScheme = AbstractDOMParser::Val_Always; else { XERCES_STD_QUALIFIER cerr << "Unknown -v= value: " << parm << XERCES_STD_QUALIFIER endl; return 2; } } else if (!strcmp(argV[argInd], "-n") || !strcmp(argV[argInd], "-N")) { doNamespaces = true; } else if (!strcmp(argV[argInd], "-s") || !strcmp(argV[argInd], "-S")) { doSchema = true; } else if (!strcmp(argV[argInd], "-f") || !strcmp(argV[argInd], "-F")) { schemaFullChecking = true; } else if (!strcmp(argV[argInd], "-l") || !strcmp(argV[argInd], "-L")) { doList = true; } else if (!strncmp(argV[argInd], "-r=", 3) || !strncmp(argV[argInd], "-R=", 3)) { const char* const numStr = &argV[argInd][3]; XMLCh* numXStr = XMLString::transcode(numStr); numReps = XMLString::parseInt(numXStr); XMLString::release(&numXStr); } else { XERCES_STD_QUALIFIER cerr << "Unknown option '" << argV[argInd] << "', ignoring it\n" << XERCES_STD_QUALIFIER endl; } } // // There should be only one and only one parameter left, and that // should be the file name. // if (argInd != argC - 1) { usage(); return 1; } // Instantiate the DOM domBuilder with its memory manager. MemoryMonitor *domBuilderMemMonitor = new MemoryMonitor(); static const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull }; DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(gLS); DOMLSParser *domBuilder = ((DOMImplementationLS*)impl)->createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS, 0, domBuilderMemMonitor); DOMLSParserHandler domBuilderHandler; domBuilder->getDomConfig()->setParameter(XMLUni::fgDOMErrorHandler, &domBuilderHandler); // Instantiate the SAX2 parser with its memory manager. MemoryMonitor *sax2MemMonitor = new MemoryMonitor(); SAX2XMLReader *sax2parser = XMLReaderFactory::createXMLReader(sax2MemMonitor); SAXErrorHandler saxErrorHandler; sax2parser->setErrorHandler(&saxErrorHandler); // Instantiate the SAX 1 parser with its memory manager. MemoryMonitor *sax1MemMonitor = new MemoryMonitor(); SAXParser *saxParser = new (sax1MemMonitor) SAXParser(0, sax1MemMonitor); saxParser->setErrorHandler(&saxErrorHandler); // set features domBuilder->getDomConfig()->setParameter(XMLUni::fgDOMNamespaces, doNamespaces); sax2parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, doNamespaces); saxParser->setDoNamespaces(doNamespaces); domBuilder->getDomConfig()->setParameter(XMLUni::fgXercesSchema, doSchema); sax2parser->setFeature(XMLUni::fgXercesSchema, doSchema); saxParser->setDoSchema(doSchema); domBuilder->getDomConfig()->setParameter(XMLUni::fgXercesHandleMultipleImports, true); sax2parser->setFeature(XMLUni::fgXercesHandleMultipleImports, true); saxParser->setHandleMultipleImports (true); domBuilder->getDomConfig()->setParameter(XMLUni::fgXercesSchemaFullChecking, schemaFullChecking); sax2parser->setFeature(XMLUni::fgXercesSchemaFullChecking, schemaFullChecking); saxParser->setValidationSchemaFullChecking(schemaFullChecking); if (domBuilderValScheme == AbstractDOMParser::Val_Auto) { domBuilder->getDomConfig()->setParameter(XMLUni::fgDOMValidateIfSchema, true); sax2parser->setFeature(XMLUni::fgSAX2CoreValidation, true); sax2parser->setFeature(XMLUni::fgXercesDynamic, true); saxParser->setValidationScheme(SAXParser::Val_Auto); } else if (domBuilderValScheme == AbstractDOMParser::Val_Never) { domBuilder->getDomConfig()->setParameter(XMLUni::fgDOMValidate, false); sax2parser->setFeature(XMLUni::fgSAX2CoreValidation, false); saxParser->setValidationScheme(SAXParser::Val_Never); } else if (domBuilderValScheme == AbstractDOMParser::Val_Always) { domBuilder->getDomConfig()->setParameter(XMLUni::fgDOMValidate, true); sax2parser->setFeature(XMLUni::fgSAX2CoreValidation, true); sax2parser->setFeature(XMLUni::fgXercesDynamic, false); saxParser->setValidationScheme(SAXParser::Val_Always); } // enable datatype normalization - default is off domBuilder->getDomConfig()->setParameter(XMLUni::fgDOMDatatypeNormalization, true); XERCES_STD_QUALIFIER ifstream fin; bool more = true; // the input is a list file if (doList) fin.open(argV[argInd]); if (fin.fail()) { XERCES_STD_QUALIFIER cerr <<"Cannot open the list file: " << argV[argInd] << XERCES_STD_QUALIFIER endl; return 2; } while (more) { char fURI[1000]; //initialize the array to zeros memset(fURI,0,sizeof(fURI)); if (doList) { if (! fin.eof() ) { fin.getline (fURI, sizeof(fURI)); if (!*fURI) continue; else { xmlFile = fURI; XERCES_STD_QUALIFIER cerr << "==Parsing== " << xmlFile << XERCES_STD_QUALIFIER endl; } } else break; } else { xmlFile = argV[argInd]; more = false; } // parse numReps times (in case we need it for some reason) for (int i=0; i<numReps; i++) { XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *doc = 0; try { // reset document pool domBuilder->resetDocumentPool(); doc = domBuilder->parseURI(xmlFile); if(doc && doc->getDocumentElement()) { XERCES_CPP_NAMESPACE_QUALIFIER DOMNodeList *list=NULL; if(doNamespaces) list=doc->getElementsByTagNameNS(doc->getDocumentElement()->getNamespaceURI(), doc->getDocumentElement()->getLocalName()); else list=doc->getElementsByTagName(doc->getDocumentElement()->getNodeName()); if(list==NULL) XERCES_STD_QUALIFIER cout << "getElementsByTagName didn't return a valid DOMNodeList." << XERCES_STD_QUALIFIER endl; else if(list->item(0)!=doc->getDocumentElement()) XERCES_STD_QUALIFIER cout << "getElementsByTagName didn't find the root element." << XERCES_STD_QUALIFIER endl; } sax2parser->parse(xmlFile); saxParser->parse(xmlFile); } catch (const OutOfMemoryException&) { XERCES_STD_QUALIFIER cerr << "OutOfMemoryException during parsing: '" << xmlFile << "'\n" << XERCES_STD_QUALIFIER endl;; continue; } catch (const XMLException& toCatch) { char *msg = XMLString::transcode(toCatch.getMessage()); XERCES_STD_QUALIFIER cerr << "\nError during parsing: '" << xmlFile << "'\n" << "Exception message is: \n" << msg << "\n" << XERCES_STD_QUALIFIER endl; XMLString::release(&msg); continue; } catch (const DOMException& toCatch) { const unsigned int maxChars = 2047; XMLCh errText[maxChars + 1]; XERCES_STD_QUALIFIER cerr << "\nDOM Error during parsing: '" << xmlFile << "'\n" << "DOMException code is: " << toCatch.code << XERCES_STD_QUALIFIER endl; if (DOMImplementation::loadDOMExceptionMsg(toCatch.code, errText, maxChars)) { char * msg = XMLString::transcode(errText); XERCES_STD_QUALIFIER cerr << "Message is: " << msg << XERCES_STD_QUALIFIER endl; continue; } } catch (...) { XERCES_STD_QUALIFIER cerr << "\nUnexpected exception during parsing: '" << xmlFile << "'\n"; continue; } } } // // Delete the domBuilder itself. Must be done prior to calling Terminate, below. // domBuilder->release(); delete sax2parser; delete saxParser; XERCES_STD_QUALIFIER cout << "At destruction, domBuilderMemMonitor has " << domBuilderMemMonitor->getTotalMemory() << " bytes." << XERCES_STD_QUALIFIER endl; XERCES_STD_QUALIFIER cout << "At destruction, sax2MemMonitor has " << sax2MemMonitor->getTotalMemory() << " bytes." << XERCES_STD_QUALIFIER endl; XERCES_STD_QUALIFIER cout << "At destruction, sax1MemMonitor has " << sax1MemMonitor->getTotalMemory() << " bytes." << XERCES_STD_QUALIFIER endl; delete domBuilderMemMonitor; delete sax2MemMonitor; delete sax1MemMonitor; XMLPlatformUtils::Terminate(); XERCES_STD_QUALIFIER cout << "At destruction, staticMemMonitor has " << staticMemMonitor->getTotalMemory() << " bytes." << XERCES_STD_QUALIFIER endl; delete staticMemMonitor; return 0; }
// --------------------------------------------------------------------------- // Program entry point // --------------------------------------------------------------------------- int main(int argC, char* argV[]) { // Initialize the XML4C system try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { XERCES_STD_QUALIFIER cerr << "Error during initialization! Message:\n" << StrX(toCatch.getMessage()) << XERCES_STD_QUALIFIER endl; return 1; } int parmInd; for (parmInd = 1; parmInd < argC; parmInd++) { // Break out on first parm not starting with a dash if (argV[parmInd][0] != '-') break; // Watch for special case help request if (!strcmp(argV[parmInd], "-?")) { usage(); XMLPlatformUtils::Terminate(); return 2; } else if (!strncmp(argV[parmInd], "-v=", 3) || !strncmp(argV[parmInd], "-V=", 3)) { const char* const parm = &argV[parmInd][3]; if (!strcmp(parm, "never")) valScheme = SAXParser::Val_Never; else if (!strcmp(parm, "auto")) valScheme = SAXParser::Val_Auto; else if (!strcmp(parm, "always")) valScheme = SAXParser::Val_Always; else { XERCES_STD_QUALIFIER cerr << "Unknown -v= value: " << parm << XERCES_STD_QUALIFIER endl; XMLPlatformUtils::Terminate(); return 2; } } else if (!strcmp(argV[parmInd], "-n") || !strcmp(argV[parmInd], "-N")) { doNamespaces = true; } else if (!strcmp(argV[parmInd], "-s") || !strcmp(argV[parmInd], "-S")) { doSchema = true; } else if (!strcmp(argV[parmInd], "-f") || !strcmp(argV[parmInd], "-F")) { schemaFullChecking = true; } else { XERCES_STD_QUALIFIER cerr << "Unknown option '" << argV[parmInd] << "', ignoring it\n" << XERCES_STD_QUALIFIER endl; } } // // Create a SAX parser object. Then, according to what we were told on // the command line, set the options. // SAXParser* parser = new SAXParser; parser->setValidationScheme(valScheme); parser->setDoNamespaces(doNamespaces); parser->setDoSchema(doSchema); parser->setValidationSchemaFullChecking(schemaFullChecking); // // Create our SAX handler object and install it on the parser, as the // document and error handler. We are responsible for cleaning them // up, but since its just stack based here, there's nothing special // to do. // StdInParseHandlers handler; parser->setDocumentHandler(&handler); parser->setErrorHandler(&handler); unsigned long duration; int errorCount = 0; // create a faux scope so that 'src' destructor is called before // XMLPlatformUtils::Terminate { // // Kick off the parse and catch any exceptions. Create a standard // input input source and tell the parser to parse from that. // StdInInputSource src; try { const unsigned long startMillis = XMLPlatformUtils::getCurrentMillis(); parser->parse(src); const unsigned long endMillis = XMLPlatformUtils::getCurrentMillis(); duration = endMillis - startMillis; errorCount = parser->getErrorCount(); } catch (const OutOfMemoryException&) { XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl; errorCount = 2; return 4; } catch (const XMLException& e) { XERCES_STD_QUALIFIER cerr << "\nError during parsing: \n" << StrX(e.getMessage()) << "\n" << XERCES_STD_QUALIFIER endl; errorCount = 1; return 4; } // Print out the stats that we collected and time taken if (!errorCount) { XERCES_STD_QUALIFIER cout << StrX(src.getSystemId()) << ": " << duration << " ms (" << handler.getElementCount() << " elems, " << handler.getAttrCount() << " attrs, " << handler.getSpaceCount() << " spaces, " << handler.getCharacterCount() << " chars)" << XERCES_STD_QUALIFIER endl; } } // // Delete the parser itself. Must be done prior to calling Terminate, below. // delete parser; XMLPlatformUtils::Terminate(); if (errorCount > 0) return 4; else return 0; }
void process(char* const xmlFile) { // // Create a Schema validator to be used for our validation work. Then create // a SAX parser object and pass it our validator. Then, according to what // we were told on the command line, set it to validate or not. He owns // the validator, so we have to allocate it. // SAXParser parser; parser.setValidationScheme(SAXParser::Val_Always); parser.setDoNamespaces(true); parser.setDoSchema(true); parser.parse(xmlFile); if (parser.getErrorCount()) { XERCES_STD_QUALIFIER cout << "\nErrors occurred, no output available\n" << XERCES_STD_QUALIFIER endl; return; } if (!parser.getValidator().handlesSchema()) { XERCES_STD_QUALIFIER cout << "\n Non schema document, no output available\n" << XERCES_STD_QUALIFIER endl; return; } Grammar* rootGrammar = parser.getRootGrammar(); if (!rootGrammar || rootGrammar->getGrammarType() != Grammar::SchemaGrammarType) { XERCES_STD_QUALIFIER cout << "\n Non schema grammar, no output available\n" << XERCES_STD_QUALIFIER endl; return; } // // Now we will get an enumerator for the element pool from the validator // and enumerate the elements, printing them as we go. For each element // we get an enumerator for its attributes and print them also. // SchemaGrammar* grammar = (SchemaGrammar*) rootGrammar; RefHash3KeysIdPoolEnumerator<SchemaElementDecl> elemEnum = grammar->getElemEnumerator(); if (!elemEnum.hasMoreElements()) { XERCES_STD_QUALIFIER cout << "\nThe validator has no elements to display\n" << XERCES_STD_QUALIFIER endl; return; } while(elemEnum.hasMoreElements()) { const SchemaElementDecl& curElem = elemEnum.nextElement(); // Name XERCES_STD_QUALIFIER cout << "Name:\t\t\t" << StrX(curElem.getFullName()) << "\n"; // Model Type XERCES_STD_QUALIFIER cout << "Model Type:\t\t"; switch( curElem.getModelType() ) { case SchemaElementDecl::Empty: XERCES_STD_QUALIFIER cout << "Empty"; break; case SchemaElementDecl::Any: XERCES_STD_QUALIFIER cout << "Any"; break; case SchemaElementDecl::Mixed_Simple: XERCES_STD_QUALIFIER cout << "Mixed_Simple"; break; case SchemaElementDecl::Mixed_Complex: XERCES_STD_QUALIFIER cout << "Mixed_Complex"; break; case SchemaElementDecl::Children: XERCES_STD_QUALIFIER cout << "Children"; break; case SchemaElementDecl::Simple: XERCES_STD_QUALIFIER cout << "Simple"; break; case SchemaElementDecl::ElementOnlyEmpty: XERCES_STD_QUALIFIER cout << "ElementOnlyEmpty"; break; default: XERCES_STD_QUALIFIER cout << "Unknown"; break; } XERCES_STD_QUALIFIER cout << "\n"; // Create Reason XERCES_STD_QUALIFIER cout << "Create Reason:\t"; switch( curElem.getCreateReason() ) { case XMLElementDecl::NoReason: XERCES_STD_QUALIFIER cout << "Empty"; break; case XMLElementDecl::Declared: XERCES_STD_QUALIFIER cout << "Declared"; break; case XMLElementDecl::AttList: XERCES_STD_QUALIFIER cout << "AttList"; break; case XMLElementDecl::InContentModel: XERCES_STD_QUALIFIER cout << "InContentModel"; break; case XMLElementDecl::AsRootElem: XERCES_STD_QUALIFIER cout << "AsRootElem"; break; case XMLElementDecl::JustFaultIn: XERCES_STD_QUALIFIER cout << "JustFaultIn"; break; default: XERCES_STD_QUALIFIER cout << "Unknown"; break; } XERCES_STD_QUALIFIER cout << "\n"; // Content Spec Node processContentSpecNode( curElem.getContentSpec() ); // Misc Flags int mflags = curElem.getMiscFlags(); if( mflags !=0 ) { XERCES_STD_QUALIFIER cout << "Misc. Flags:\t"; } if ( mflags & SchemaSymbols::XSD_NILLABLE ) XERCES_STD_QUALIFIER cout << "Nillable "; if ( mflags & SchemaSymbols::XSD_ABSTRACT ) XERCES_STD_QUALIFIER cout << "Abstract "; if ( mflags & SchemaSymbols::XSD_FIXED ) XERCES_STD_QUALIFIER cout << "Fixed "; if( mflags !=0 ) { XERCES_STD_QUALIFIER cout << "\n"; } // Substitution Name SchemaElementDecl* subsGroup = curElem.getSubstitutionGroupElem(); if( subsGroup ) { const XMLCh* uriText = parser.getURIText(subsGroup->getURI()); XERCES_STD_QUALIFIER cout << "Substitution Name:\t" << StrX(uriText) << "," << StrX(subsGroup->getBaseName()) << "\n"; } // Content Model const XMLCh* fmtCntModel = curElem.getFormattedContentModel(); if( fmtCntModel != NULL ) { XERCES_STD_QUALIFIER cout << "Content Model:\t" << StrX(fmtCntModel) << "\n"; } const ComplexTypeInfo* ctype = curElem.getComplexTypeInfo(); if( ctype != NULL) { XERCES_STD_QUALIFIER cout << "ComplexType:\n"; XERCES_STD_QUALIFIER cout << "\tTypeName:\t" << StrX(ctype->getTypeName()) << "\n"; ContentSpecNode* cSpecNode = ctype->getContentSpec(); processContentSpecNode(cSpecNode, true ); } // Datatype DatatypeValidator* dtValidator = curElem.getDatatypeValidator(); processDatatypeValidator( dtValidator ); // Get an enumerator for this guy's attributes if any if ( curElem.hasAttDefs() ) { processAttributes( curElem.getAttDefList() ); } XERCES_STD_QUALIFIER cout << "--------------------------------------------"; XERCES_STD_QUALIFIER cout << XERCES_STD_QUALIFIER endl; } return; }
// --------------------------------------------------------------------------- // Program entry point // --------------------------------------------------------------------------- int main(int argC, char* argV[]) { // Check command line and extract arguments. if (argC < 2) { usage(); return 1; } const char* xmlFile = 0; SAXParser::ValSchemes valScheme = SAXParser::Val_Auto; bool doNamespaces = false; bool doSchema = false; bool schemaFullChecking = false; bool doList = false; bool errorOccurred = false; bool recognizeNEL = false; char localeStr[64]; memset(localeStr, 0, sizeof localeStr); int argInd; for (argInd = 1; argInd < argC; argInd++) { // Break out on first parm not starting with a dash if (argV[argInd][0] != '-') break; // Watch for special case help request if (!strcmp(argV[argInd], "-?")) { usage(); return 2; } else if (!strncmp(argV[argInd], "-v=", 3) || !strncmp(argV[argInd], "-V=", 3)) { const char* const parm = &argV[argInd][3]; if (!strcmp(parm, "never")) valScheme = SAXParser::Val_Never; else if (!strcmp(parm, "auto")) valScheme = SAXParser::Val_Auto; else if (!strcmp(parm, "always")) valScheme = SAXParser::Val_Always; else { XERCES_STD_QUALIFIER cerr << "Unknown -v= value: " << parm << XERCES_STD_QUALIFIER endl; return 2; } } else if (!strcmp(argV[argInd], "-n") || !strcmp(argV[argInd], "-N")) { doNamespaces = true; } else if (!strcmp(argV[argInd], "-s") || !strcmp(argV[argInd], "-S")) { doSchema = true; } else if (!strcmp(argV[argInd], "-f") || !strcmp(argV[argInd], "-F")) { schemaFullChecking = true; } else if (!strcmp(argV[argInd], "-l") || !strcmp(argV[argInd], "-L")) { doList = true; } else if (!strcmp(argV[argInd], "-special:nel")) { // turning this on will lead to non-standard compliance behaviour // it will recognize the unicode character 0x85 as new line character // instead of regular character as specified in XML 1.0 // do not turn this on unless really necessary recognizeNEL = true; } else if (!strncmp(argV[argInd], "-locale=", 8)) { // Get out the end of line strcpy(localeStr, &(argV[argInd][8])); } else { XERCES_STD_QUALIFIER cerr << "Unknown option '" << argV[argInd] << "', ignoring it\n" << XERCES_STD_QUALIFIER endl; } } // // There should at least one parameter left, and that // should be the file name(s). // if (argInd == argC) { usage(); return 1; } // Initialize the XML4C2 system try { if (strlen(localeStr)) { XMLPlatformUtils::Initialize(localeStr); } else { XMLPlatformUtils::Initialize(); } if (recognizeNEL) { XMLPlatformUtils::recognizeNEL(recognizeNEL); } } catch (const XMLException& toCatch) { XERCES_STD_QUALIFIER cerr << "Error during initialization! Message:\n" << StrX(toCatch.getMessage()) << XERCES_STD_QUALIFIER endl; return 1; } // // Create a SAX parser object. Then, according to what we were told on // the command line, set it to validate or not. // SAXParser* parser = new SAXParser; parser->setValidationScheme(valScheme); parser->setDoNamespaces(doNamespaces); parser->setDoSchema(doSchema); parser->setHandleMultipleImports (true); parser->setValidationSchemaFullChecking(schemaFullChecking); // // Create our SAX handler object and install it on the parser, as the // document and error handler. // SAXCountHandlers handler; parser->setDocumentHandler(&handler); parser->setErrorHandler(&handler); // // Get the starting time and kick off the parse of the indicated // file. Catch any exceptions that might propogate out of it. // unsigned long duration; XERCES_STD_QUALIFIER ifstream fin; // the input is a list file if (doList) fin.open(argV[argInd]); if (fin.fail()) { XERCES_STD_QUALIFIER cerr <<"Cannot open the list file: " << argV[argInd] << XERCES_STD_QUALIFIER endl; return 2; } while (true) { char fURI[1000]; //initialize the array to zeros memset(fURI,0,sizeof(fURI)); if (doList) { if (! fin.eof() ) { fin.getline (fURI, sizeof(fURI)); if (!*fURI) continue; else { xmlFile = fURI; XERCES_STD_QUALIFIER cerr << "==Parsing== " << xmlFile << XERCES_STD_QUALIFIER endl; } } else break; } else { if (argInd < argC) { xmlFile = argV[argInd]; argInd++; } else break; } //reset error count first handler.resetErrors(); try { const unsigned long startMillis = XMLPlatformUtils::getCurrentMillis(); parser->parse(xmlFile); const unsigned long endMillis = XMLPlatformUtils::getCurrentMillis(); duration = endMillis - startMillis; } catch (const OutOfMemoryException&) { XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl; errorOccurred = true; continue; } catch (const XMLException& e) { XERCES_STD_QUALIFIER cerr << "\nError during parsing: '" << xmlFile << "'\n" << "Exception message is: \n" << StrX(e.getMessage()) << "\n" << XERCES_STD_QUALIFIER endl; errorOccurred = true; continue; } catch (...) { XERCES_STD_QUALIFIER cerr << "\nUnexpected exception during parsing: '" << xmlFile << "'\n"; errorOccurred = true; continue; } // Print out the stats that we collected and time taken if (!handler.getSawErrors()) { XERCES_STD_QUALIFIER cout << xmlFile << ": " << duration << " ms (" << handler.getElementCount() << " elems, " << handler.getAttrCount() << " attrs, " << handler.getSpaceCount() << " spaces, " << handler.getCharacterCount() << " chars)" << XERCES_STD_QUALIFIER endl; } else errorOccurred = true; } if (doList) fin.close(); // // Delete the parser itself. Must be done prior to calling Terminate, below. // delete parser; // And call the termination method XMLPlatformUtils::Terminate(); if (errorOccurred) return 4; else return 0; }
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { #else int main (int argc, char* argv[]) { //int nlhs; //mxArray *plhs[3]; //int nrhs; //const mxArray *prhs[]; #endif #ifdef MAT if (nrhs < 1) { #else if (argc < 1) { #endif cout << "XML corpus file required"; exit(1); } // get the corpus file name #ifdef MAT int strlen = mxGetN(prhs[0])+1; char* corpus_file = (char*)mxCalloc(strlen, sizeof(char)); //mxCalloc is similar to malloc in C mxGetString(prhs[0], corpus_file, strlen); #else char* corpus_file = argv[1]; #endif #ifdef DEBUG cout << "Parsing document: " << corpus_file << "\n"; #endif try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Error during initialization! :\n" << message << "\n"; XMLString::release(&message); exit(1);//return 1; } SAXParser* parser = new SAXParser(); parser->setValidationScheme(SAXParser::Val_Always); parser->setDoNamespaces(true); // optional MovieSAXHandler* content = new MovieSAXHandler(); ErrorHandler* errHandler = (ErrorHandler*) content; parser->setDocumentHandler(content); parser->setErrorHandler(errHandler); try { parser->parse(corpus_file); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); exit(1);//return -1; } catch (const SAXParseException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); exit(1);//return -1; } catch (...) { cout << "Unexpected Exception \n" ; exit(1);//return -1; } #ifdef DEBUG cout << "Printing the inverted index: \n"; cout << InvertedIndex::instance() << "\n"; #endif #ifdef MAT // call this function to output all the matrices to the MATLAB environment. MATProcedure(nlhs, plhs, nrhs, prhs); #else // call this function to output features to files OUTProcedure(); #endif #ifdef DEBUG cout << "Done \n"; #endif delete InvertedIndex::instance(); delete parser; delete content; }
// --------------------------------------------------------------------------- // Program entry point // --------------------------------------------------------------------------- int main(int argC, char* argV[]) { // Initialize the XML4C2 system try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { XERCES_STD_QUALIFIER cerr << "Error during initialization! Message:\n" << StrX(toCatch.getMessage()) << XERCES_STD_QUALIFIER endl; return 1; } SAXParser::ValSchemes valScheme = SAXParser::Val_Auto; bool doNamespaces = false; bool doSchema = false; bool schemaFullChecking = false; int argInd; for (argInd = 1; argInd < argC; argInd++) { // Break out on first parm not starting with a dash if (argV[argInd][0] != '-') { usage(); XMLPlatformUtils::Terminate(); return 1; } // Watch for special case help request if (!strcmp(argV[argInd], "-?")) { usage(); XMLPlatformUtils::Terminate(); return 1; } else if (!strncmp(argV[argInd], "-v=", 3) || !strncmp(argV[argInd], "-V=", 3)) { const char* const parm = &argV[argInd][3]; if (!strcmp(parm, "never")) valScheme = SAXParser::Val_Never; else if (!strcmp(parm, "auto")) valScheme = SAXParser::Val_Auto; else if (!strcmp(parm, "always")) valScheme = SAXParser::Val_Always; else { XERCES_STD_QUALIFIER cerr << "Unknown -v= value: " << parm << XERCES_STD_QUALIFIER endl; return 2; } } else if (!strcmp(argV[argInd], "-n") || !strcmp(argV[argInd], "-N")) { doNamespaces = true; } else if (!strcmp(argV[argInd], "-s") || !strcmp(argV[argInd], "-S")) { doSchema = true; } else if (!strcmp(argV[argInd], "-f") || !strcmp(argV[argInd], "-F")) { schemaFullChecking = true; } else { XERCES_STD_QUALIFIER cerr << "Unknown option '" << argV[argInd] << "', ignoring it\n" << XERCES_STD_QUALIFIER endl; } } // // Create a SAX parser object. Then, according to what we were told on // the command line, set it to validate or not. // SAXParser* parser = new SAXParser; parser->setValidationScheme(valScheme); parser->setDoNamespaces(doNamespaces); parser->setDoSchema(doSchema); parser->setValidationSchemaFullChecking(schemaFullChecking); // // Create our SAX handler object and install it on the parser, as the // document and error handlers. // MemParseHandlers handler; parser->setDocumentHandler(&handler); parser->setErrorHandler(&handler); // // Create MemBufferInputSource from the buffer containing the XML // statements. // // NOTE: We are using strlen() here, since we know that the chars in // our hard coded buffer are single byte chars!!! The parameter wants // the number of BYTES, not chars, so when you create a memory buffer // give it the byte size (which just happens to be the same here.) // MemBufInputSource* memBufIS = new MemBufInputSource ( (const XMLByte*)gXMLInMemBuf , strlen(gXMLInMemBuf) , gMemBufId , false ); // // Get the starting time and kick off the parse of the indicated // file. Catch any exceptions that might propogate out of it. // unsigned long duration; int errorCount = 0; int errorCode = 0; try { const unsigned long startMillis = XMLPlatformUtils::getCurrentMillis(); parser->parse(*memBufIS); const unsigned long endMillis = XMLPlatformUtils::getCurrentMillis(); duration = endMillis - startMillis; errorCount = parser->getErrorCount(); } catch (const OutOfMemoryException&) { XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl; errorCode = 5; } catch (const XMLException& e) { XERCES_STD_QUALIFIER cerr << "\nError during parsing memory stream:\n" << "Exception message is: \n" << StrX(e.getMessage()) << "\n" << XERCES_STD_QUALIFIER endl; errorCode = 4; } if(errorCode) { XMLPlatformUtils::Terminate(); return errorCode; } // Print out the stats that we collected and time taken. if (!errorCount) { XERCES_STD_QUALIFIER cout << "\nFinished parsing the memory buffer containing the following " << "XML statements:\n\n" << gXMLInMemBuf << "\n\n\n" << "Parsing took " << duration << " ms (" << handler.getElementCount() << " elements, " << handler.getAttrCount() << " attributes, " << handler.getSpaceCount() << " spaces, " << handler.getCharacterCount() << " characters).\n" << XERCES_STD_QUALIFIER endl; } // // Delete the parser itself. Must be done prior to calling Terminate, below. // delete parser; delete memBufIS; // And call the termination method XMLPlatformUtils::Terminate(); if (errorCount > 0) return 4; else return 0; }
// --------------------------------------------------------------------------- // Program entry point // --------------------------------------------------------------------------- int main(int argC, char* argV[]) { // Initialize the XML4C system try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { XERCES_STD_QUALIFIER cerr << "Error during initialization! :\n" << StrX(toCatch.getMessage()) << XERCES_STD_QUALIFIER endl; return 1; } // Check command line and extract arguments. if (argC < 2) { usage(); XMLPlatformUtils::Terminate(); return 1; } // See if non validating dom parser configuration is requested. int parmInd; for (parmInd = 1; parmInd < argC; parmInd++) { // Break out on first parm not starting with a dash if (argV[parmInd][0] != '-') break; // Watch for special case help request if (!strcmp(argV[parmInd], "-?")) { usage(); XMLPlatformUtils::Terminate(); return 2; } else if (!strncmp(argV[parmInd], "-v=", 3) || !strncmp(argV[parmInd], "-V=", 3)) { const char* const parm = &argV[parmInd][3]; if (!strcmp(parm, "never")) valScheme = SAXParser::Val_Never; else if (!strcmp(parm, "auto")) valScheme = SAXParser::Val_Auto; else if (!strcmp(parm, "always")) valScheme = SAXParser::Val_Always; else { XERCES_STD_QUALIFIER cerr << "Unknown -v= value: " << parm << XERCES_STD_QUALIFIER endl; XMLPlatformUtils::Terminate(); return 2; } } else if (!strcmp(argV[parmInd], "-n") || !strcmp(argV[parmInd], "-N")) { doNamespaces = true; } else if (!strcmp(argV[parmInd], "-s") || !strcmp(argV[parmInd], "-S")) { doSchema = true; } else if (!strcmp(argV[parmInd], "-f") || !strcmp(argV[parmInd], "-F")) { schemaFullChecking = true; } else { XERCES_STD_QUALIFIER cerr << "Unknown option '" << argV[parmInd] << "', ignoring it\n" << XERCES_STD_QUALIFIER endl; } } // // And now we have to have only one parameter left and it must be // the file name. // if (parmInd + 1 != argC) { usage(); XMLPlatformUtils::Terminate(); return 1; } xmlFile = argV[parmInd]; int errorCount = 0; // // Create a SAX parser object to use and create our SAX event handlers // and plug them in. // SAXParser* parser = new SAXParser; PParseHandlers handler; parser->setDocumentHandler(&handler); parser->setErrorHandler(&handler); parser->setValidationScheme(valScheme); parser->setDoNamespaces(doNamespaces); parser->setDoSchema(doSchema); parser->setValidationSchemaFullChecking(schemaFullChecking); // // Ok, lets do the progressive parse loop. On each time around the // loop, we look and see if the handler has found what its looking // for. When it does, we fall out then. // unsigned long duration; int errorCode = 0; try { // Create a progressive scan token XMLPScanToken token; const unsigned long startMillis = XMLPlatformUtils::getCurrentMillis(); if (!parser->parseFirst(xmlFile, token)) { XERCES_STD_QUALIFIER cerr << "scanFirst() failed\n" << XERCES_STD_QUALIFIER endl; XMLPlatformUtils::Terminate(); return 1; } // // We started ok, so lets call scanNext() until we find what we want // or hit the end. // bool gotMore = true; while (gotMore && !parser->getErrorCount()) gotMore = parser->parseNext(token); const unsigned long endMillis = XMLPlatformUtils::getCurrentMillis(); duration = endMillis - startMillis; errorCount = parser->getErrorCount(); // // Reset the parser-> In this simple progrma, since we just exit // now, its not technically required. But, in programs which // would remain open, you should reset after a progressive parse // in case you broke out before the end of the file. This insures // that all opened files, sockets, etc... are closed. // parser->parseReset(token); } catch (const OutOfMemoryException&) { XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl; errorCode = 5; } catch (const XMLException& toCatch) { XERCES_STD_QUALIFIER cerr << "\nAn error occurred: '" << xmlFile << "'\n" << "Exception message is: \n" << StrX(toCatch.getMessage()) << "\n" << XERCES_STD_QUALIFIER endl; errorCode = 4; } if(errorCode) { XMLPlatformUtils::Terminate(); return errorCode; } if (!errorCount) { XERCES_STD_QUALIFIER cout << xmlFile << ": " << duration << " ms (" << handler.getElementCount() << " elems, " << handler.getAttrCount() << " attrs, " << handler.getSpaceCount() << " spaces, " << handler.getCharacterCount() << " chars)" << XERCES_STD_QUALIFIER endl; } // // Delete the parser itself. Must be done prior to calling Terminate, below. // delete parser; // And call the termination method XMLPlatformUtils::Terminate(); if (errorCount > 0) return 4; else return 0; }
int mitsuba_app(int argc, char **argv) { int optchar; char *end_ptr = NULL; try { /* Default settings */ int nprocs_avail = getCoreCount(), nprocs = nprocs_avail; int numParallelScenes = 1; std::string nodeName = getHostName(), networkHosts = "", destFile=""; bool quietMode = false, progressBars = true, skipExisting = false; ELogLevel logLevel = EInfo; ref<FileResolver> fileResolver = Thread::getThread()->getFileResolver(); bool treatWarningsAsErrors = false; std::map<std::string, std::string, SimpleStringOrdering> parameters; int blockSize = 32; int flushTimer = -1; if (argc < 2) { help(); return 0; } optind = 1; /* Parse command-line arguments */ while ((optchar = getopt(argc, argv, "a:c:D:s:j:n:o:r:b:p:qhzvtwx")) != -1) { switch (optchar) { case 'a': { std::vector<std::string> paths = tokenize(optarg, ";"); for (int i=(int) paths.size()-1; i>=0; --i) fileResolver->prependPath(paths[i]); } break; case 'c': networkHosts = networkHosts + std::string(";") + std::string(optarg); break; case 'w': treatWarningsAsErrors = true; break; case 'D': { std::vector<std::string> param = tokenize(optarg, "="); if (param.size() != 2) SLog(EError, "Invalid parameter specification \"%s\"", optarg); parameters[param[0]] = param[1]; } break; case 's': { std::ifstream is(optarg); if (is.fail()) SLog(EError, "Could not open host file!"); std::string host; while (is >> host) { if (host.length() < 1 || host.c_str()[0] == '#') continue; networkHosts = networkHosts + std::string(";") + host; } } break; case 'n': nodeName = optarg; break; case 'o': destFile = optarg; break; case 'v': if (logLevel != EDebug) logLevel = EDebug; else logLevel = ETrace; break; case 'x': skipExisting = true; break; case 'p': nprocs = strtol(optarg, &end_ptr, 10); if (*end_ptr != '\0') SLog(EError, "Could not parse the processor count!"); break; case 'j': numParallelScenes = strtol(optarg, &end_ptr, 10); if (*end_ptr != '\0') SLog(EError, "Could not parse the parallel scene count!"); break; case 'r': flushTimer = strtol(optarg, &end_ptr, 10); if (*end_ptr != '\0') SLog(EError, "Could not parse the '-r' parameter argument!"); break; case 'b': blockSize = strtol(optarg, &end_ptr, 10); if (*end_ptr != '\0') SLog(EError, "Could not parse the block size!"); if (blockSize < 2 || blockSize > 128) SLog(EError, "Invalid block size (should be in the range 2-128)"); break; case 'z': progressBars = false; break; case 'q': quietMode = true; break; case 'h': default: help(); return 0; } } ProgressReporter::setEnabled(progressBars); /* Initialize OpenMP */ Thread::initializeOpenMP(nprocs); /* Configure the logging subsystem */ ref<Logger> log = Thread::getThread()->getLogger(); log->setLogLevel(logLevel); log->setErrorLevel(treatWarningsAsErrors ? EWarn : EError); /* Disable the default appenders */ for (size_t i=0; i<log->getAppenderCount(); ++i) { Appender *appender = log->getAppender(i); if (appender->getClass()->derivesFrom(MTS_CLASS(StreamAppender))) log->removeAppender(appender); } log->addAppender(new StreamAppender(formatString("mitsuba.%s.log", nodeName.c_str()))); if (!quietMode) log->addAppender(new StreamAppender(&std::cout)); SLog(EInfo, "Mitsuba version %s, Copyright (c) " MTS_YEAR " Wenzel Jakob", Version(MTS_VERSION).toStringComplete().c_str()); /* Configure the scheduling subsystem */ Scheduler *scheduler = Scheduler::getInstance(); bool useCoreAffinity = nprocs == nprocs_avail; for (int i=0; i<nprocs; ++i) scheduler->registerWorker(new LocalWorker(useCoreAffinity ? i : -1, formatString("wrk%i", i))); std::vector<std::string> hosts = tokenize(networkHosts, ";"); /* Establish network connections to nested servers */ for (size_t i=0; i<hosts.size(); ++i) { const std::string &hostName = hosts[i]; ref<Stream> stream; if (hostName.find("@") == std::string::npos) { int port = MTS_DEFAULT_PORT; std::vector<std::string> tokens = tokenize(hostName, ":"); if (tokens.size() == 0 || tokens.size() > 2) { SLog(EError, "Invalid host specification '%s'!", hostName.c_str()); } else if (tokens.size() == 2) { port = strtol(tokens[1].c_str(), &end_ptr, 10); if (*end_ptr != '\0') SLog(EError, "Invalid host specification '%s'!", hostName.c_str()); } stream = new SocketStream(tokens[0], port); } else { std::string path = "~/mitsuba"; // default path if not specified std::vector<std::string> tokens = tokenize(hostName, "@:"); if (tokens.size() < 2 || tokens.size() > 3) { SLog(EError, "Invalid host specification '%s'!", hostName.c_str()); } else if (tokens.size() == 3) { path = tokens[2]; } std::vector<std::string> cmdLine; cmdLine.push_back(formatString("bash -c 'cd %s; . setpath.sh; mtssrv -ls'", path.c_str())); stream = new SSHStream(tokens[0], tokens[1], cmdLine); } try { scheduler->registerWorker(new RemoteWorker(formatString("net%i", i), stream)); } catch (std::runtime_error &e) { if (hostName.find("@") != std::string::npos) { #if defined(__WINDOWS__) SLog(EWarn, "Please ensure that passwordless authentication " "using plink.exe and pageant.exe is enabled (see the documentation for more information)"); #else SLog(EWarn, "Please ensure that passwordless authentication " "is enabled (e.g. using ssh-agent - see the documentation for more information)"); #endif } throw e; } } scheduler->start(); #if !defined(__WINDOWS__) /* Initialize signal handlers */ struct sigaction sa; sa.sa_handler = signalHandler; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; if (sigaction(SIGHUP, &sa, NULL)) SLog(EError, "Could not install a custom signal handler!"); if (sigaction(SIGFPE, &sa, NULL)) SLog(EError, "Could not install a custom signal handler!"); #endif /* Prepare for parsing scene descriptions */ SAXParser* parser = new SAXParser(); fs::path schemaPath = fileResolver->resolveAbsolute("data/schema/scene.xsd"); /* Check against the 'scene.xsd' XML Schema */ parser->setDoSchema(true); parser->setValidationSchemaFullChecking(true); parser->setValidationScheme(SAXParser::Val_Always); parser->setExternalNoNamespaceSchemaLocation(schemaPath.c_str()); /* Set the handler */ SceneHandler *handler = new SceneHandler(parameters); parser->setDoNamespaces(true); parser->setDocumentHandler(handler); parser->setErrorHandler(handler); renderQueue = new RenderQueue(); ref<FlushThread> flushThread; if (flushTimer > 0) { flushThread = new FlushThread(flushTimer); flushThread->start(); } int jobIdx = 0; for (int i=optind; i<argc; ++i) { fs::path filename = fileResolver->resolve(argv[i]), filePath = fs::absolute(filename).parent_path(), baseName = filename.stem(); ref<FileResolver> frClone = fileResolver->clone(); frClone->prependPath(filePath); Thread::getThread()->setFileResolver(frClone); SLog(EInfo, "Parsing scene description from \"%s\" ..", argv[i]); parser->parse(filename.c_str()); ref<Scene> scene = handler->getScene(); scene->setSourceFile(filename); scene->setDestinationFile(destFile.length() > 0 ? fs::path(destFile) : (filePath / baseName)); scene->setBlockSize(blockSize); if (scene->destinationExists() && skipExisting) continue; ref<RenderJob> thr = new RenderJob(formatString("ren%i", jobIdx++), scene, renderQueue, -1, -1, -1, true, flushTimer > 0); thr->start(); renderQueue->waitLeft(numParallelScenes-1); if (i+1 < argc && numParallelScenes == 1) Statistics::getInstance()->resetAll(); } /* Wait for all render processes to finish */ renderQueue->waitLeft(0); if (flushThread) flushThread->quit(); renderQueue = NULL; delete handler; delete parser; Statistics::getInstance()->printStats(); } catch (const std::exception &e) { std::cerr << "Caught a critical exception: " << e.what() << endl; return -1; } catch (...) { std::cerr << "Caught a critical exception of unknown type!" << endl; return -1; } return 0; }