/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include #include #include #include int main( int argc, char* argv[]) { using std::cerr; using std::endl; using std::strcmp; // TraceListener flags... bool traceTemplates = false; bool traceTemplateChildren = false; bool traceGenerationEvent = false; bool traceSelectionEvent = false; if (argc < 2 || argc > 5) { cerr << "Usage: TraceListen [+ 1 or more of following] -tt -tg -ts -ttc" << endl; return -1; } // Set the TraceListener flags... for (int i = 1; i < argc; i ++) { if(!strcmp("-tt", argv[i])) { traceTemplates = true; } else if(!strcmp("-tg", argv[i])) { traceGenerationEvent = true; } else if(!strcmp("-ts", argv[i])) { traceSelectionEvent = true; } else if(!strcmp("-ttc", argv[i])) { traceTemplateChildren = true; } else { cerr << "Usage: TraceListen [+ 1 or more of following] -tt -tg -ts -ttc" << endl; return -1; } } try { using xercesc::XMLPlatformUtils; using xalanc::XalanTransformer; // Initialize Xerces... XMLPlatformUtils::Initialize(); // Initialize Xalan... XalanTransformer::initialize(); { using xalanc::TraceListenerDefault; using xalanc::XalanDOMString; using xalanc::XalanOutputStreamPrintWriter; using xalanc::XalanStdOutputStream; using xalanc::XSLTInputSource; using xalanc::XSLTResultTarget; // Create a XalanTransformer. XalanTransformer theXalanTransformer; // Set up a diagnostic writer to be used by the TraceListener... XalanStdOutputStream theStdErr(cerr); XalanOutputStreamPrintWriter diagnosticsWriter(theStdErr); // Make sure that error reporting, which includes any TraceListener output // does not throw exceptions when transcoding, since that could result in // an exception being thrown while another exception is active. In particular, // characters that the TraceListener writes might not be representable in the // local code page. theStdErr.setThrowTranscodeException(false); // Set up the TraceListener... TraceListenerDefault theTraceListener( diagnosticsWriter, theXalanTransformer.getMemoryManager(), traceTemplates, traceTemplateChildren, traceGenerationEvent, traceSelectionEvent); // Add the TraceListener to the XalanTransformer instance... theXalanTransformer.addTraceListener(&theTraceListener); // Our input files assume the executable will be run // from same directory as the input files. const int theResult = theXalanTransformer.transform("birds.xml", "birds.xsl", "birds.out"); if(theResult != 0) { cerr << "TraceListen Error: \n" << theXalanTransformer.getLastError() << endl << endl; } } // Terminate Xalan... XalanTransformer::terminate(); // Terminate Xerces... XMLPlatformUtils::Terminate(); // Clean up the ICU, if it's integrated... XalanTransformer::ICUCleanUp(); } catch(...) { cerr << "Exception caught! Exiting..." << endl; } return 0; }