00001 /* 00002 * Licensed to the Apache Software Foundation (ASF) under one 00003 * or more contributor license agreements. See the NOTICE file 00004 * distributed with this work for additional information 00005 * regarding copyright ownership. The ASF licenses this file 00006 * to you under the Apache License, Version 2.0 (the "License"); 00007 * you may not use this file except in compliance with the License. 00008 * You may obtain a copy of the License at 00009 * 00010 * http://www.apache.org/licenses/LICENSE-2.0 00011 * 00012 * Unless required by applicable law or agreed to in writing, software 00013 * distributed under the License is distributed on an "AS IS" BASIS, 00014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00015 * See the License for the specific language governing permissions and 00016 * limitations under the License. 00017 */ 00018 #if !defined(XercesPARSERLIAISON_HEADER_GUARD_1357924680) 00019 #define XercesPARSERLIAISON_HEADER_GUARD_1357924680 00020 00021 00022 // Base include file. Must be first. 00023 #include <xalanc/XercesParserLiaison/XercesParserLiaisonDefinitions.hpp> 00024 00025 00026 00027 // Standard Library header files. 00028 #include <xalanc/Include/XalanMap.hpp> 00029 00030 00031 00032 // Xerces DOM header files 00033 #include <xercesc/sax/ErrorHandler.hpp> 00034 00035 00036 00037 // Base class header file. 00038 #include <xalanc/XMLSupport/XMLParserLiaison.hpp> 00039 00040 00041 00042 #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE) 00043 #include <xalanc/XercesParserLiaison/Deprecated/XercesBridgeTypes.hpp> 00044 #endif 00045 #include <xalanc/XercesParserLiaison/XercesWrapperTypes.hpp> 00046 00047 00048 00049 #if XERCES_VERSION_MAJOR >= 2 00050 XALAN_DECLARE_XERCES_CLASS(XercesDOMParser) 00051 #else 00052 XALAN_DECLARE_XERCES_CLASS(DOMParser) 00053 #endif 00054 XALAN_DECLARE_XERCES_CLASS(SAXParser) 00055 00056 00057 00058 XALAN_CPP_NAMESPACE_BEGIN 00059 00060 00061 00062 class XercesDOMSupport; 00063 #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE) 00064 class XercesDocumentBridge; 00065 #endif 00066 class XercesDocumentWrapper; 00067 00068 00069 typedef XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException SAXParseExceptionType; 00070 00071 00072 class XALAN_XERCESPARSERLIAISON_EXPORT XercesParserLiaison : 00073 public XMLParserLiaison, 00074 public ErrorHandler 00075 { 00076 00077 public: 00078 00079 typedef XERCES_CPP_NAMESPACE_QUALIFIER SAXParser SAXParserType; 00080 00081 /** 00082 * Construct a XercesParserLiaison instance. 00083 * 00084 * @param theSupport instance of DOMSupport object 00085 * 00086 * @deprecated This constructor is deprecated. Use the next constructor instead. 00087 */ 00088 XercesParserLiaison( 00089 XercesDOMSupport& theSupport, 00090 MemoryManager& theManager XALAN_DEFAULT_MEMMGR); 00091 00092 /** 00093 * Construct a XercesParserLiaison instance. 00094 */ 00095 XercesParserLiaison(MemoryManager& theManager XALAN_DEFAULT_MEMMGR); 00096 00097 virtual 00098 ~XercesParserLiaison(); 00099 00100 00101 00102 // These interfaces are inherited from XMLParserLiaison... 00103 MemoryManager& 00104 getMemoryManager() 00105 { 00106 return m_externalSchemaLocation.getMemoryManager(); 00107 } 00108 00109 virtual void 00110 reset(); 00111 00112 virtual ExecutionContext* 00113 getExecutionContext() const; 00114 00115 virtual void 00116 setExecutionContext(ExecutionContext& theContext); 00117 00118 virtual XalanDocument* 00119 parseXMLStream( 00120 const InputSource& reader, 00121 const XalanDOMString& identifier = XalanDOMString(XalanMemMgrs::getDummyMemMgr())); 00122 00123 virtual void 00124 parseXMLStream( 00125 const InputSource& urlInputSource, 00126 DocumentHandler& handler, 00127 const XalanDOMString& identifier = XalanDOMString(XalanMemMgrs::getDummyMemMgr())); 00128 00129 virtual void 00130 destroyDocument(XalanDocument* theDocument); 00131 00132 virtual int 00133 getIndent() const; 00134 00135 virtual void 00136 setIndent(int i); 00137 00138 virtual bool 00139 getUseValidation() const; 00140 00141 virtual void 00142 setUseValidation(bool b); 00143 00144 virtual const XalanDOMString& 00145 getParserDescription(XalanDOMString& theResult) const; 00146 00147 virtual EntityResolver* 00148 getEntityResolver() const; 00149 00150 virtual void 00151 setEntityResolver(EntityResolver* resolver); 00152 00153 virtual XMLEntityResolver* 00154 getXMLEntityResolver() const; 00155 00156 virtual void 00157 setXMLEntityResolver(XMLEntityResolver* resolver); 00158 00159 virtual ErrorHandler* 00160 getErrorHandler() const; 00161 00162 virtual void 00163 setErrorHandler(ErrorHandler* handler); 00164 00165 // These interfaces are new to XercesParserLiaison... 00166 00167 /** 00168 * Create an instance of the Xerces default document that 00169 * is suitable as a raw document. The new document instance 00170 * is owned by this instance and will be destroyed when this 00171 * instance goes out of scope, or by an explicit call to 00172 * destroyDocument() 00173 * 00174 * @return a pointer to the new instance 00175 */ 00176 virtual DOMDocument_Type* 00177 createDOMFactory(); 00178 00179 /** 00180 * Destroy an instance created by a call to createDOMFactory(). 00181 * 00182 * @theDocument a pointer to the instance to be destroyed 00183 */ 00184 virtual void 00185 destroyDocument(DOMDocument_Type* theDocument); 00186 00187 /** Get the 'include ignorable whitespace' flag. 00188 * 00189 * This method returns the state of the parser's include ignorable 00190 * whitespace flag. 00191 * 00192 * @return 'true' if the include ignorable whitespace flag is set on 00193 * the parser, 'false' otherwise. 00194 * 00195 * @see #setIncludeIgnorableWhitespace 00196 */ 00197 virtual bool 00198 getIncludeIgnorableWhitespace() const; 00199 00200 /** Set the 'include ignorable whitespace' flag 00201 * 00202 * This method allows the user to specify whether a validating parser 00203 * should include ignorable whitespaces as text nodes. It has no effect 00204 * on non-validating parsers which always include non-markup text. 00205 * <p>When set to true (also the default), ignorable whitespaces will be 00206 * added to the DOM tree as text nodes. The method 00207 * <code>DOMText::isWhitespace</code> will return true for those text 00208 * nodes only. 00209 * <p>When set to false, all ignorable whitespace will be discarded and 00210 * no text node is added to the DOM tree. Note: applications intended 00211 * to process the "xml:space" attribute should not set this flag to false. 00212 * 00213 * @param include The new state of the include ignorable whitespace 00214 * flag. 00215 * 00216 * @see #getIncludeIgnorableWhitespace 00217 */ 00218 virtual void 00219 setIncludeIgnorableWhitespace(bool include); 00220 00221 /** 00222 * This method returns the state of the parser's namespace 00223 * handling capability. 00224 * 00225 * @return true, if the parser is currently configured to 00226 * understand namespaces, false otherwise. 00227 * 00228 * @see #setDoNamespaces 00229 */ 00230 virtual bool 00231 getDoNamespaces() const; 00232 00233 /** 00234 * This method allows users to enable or disable the parser's 00235 * namespace processing. When set to true, parser starts enforcing 00236 * all the constraints / rules specified by the NameSpace 00237 * specification. 00238 * 00239 * <p>The parser's default state is: false.</p> 00240 * 00241 * <p>This flag is ignored by the underlying scanner if the installed 00242 * validator indicates that namespace constraints should be 00243 * enforced.</p> 00244 * 00245 * @param newState The value specifying whether NameSpace rules should 00246 * be enforced or not. 00247 * 00248 * @see #getDoNamespaces 00249 */ 00250 virtual void 00251 setDoNamespaces(bool newState); 00252 00253 /** 00254 * This method returns the state of the parser's 00255 * exit-on-First-Fatal-Error flag. 00256 * 00257 * @return true, if the parser is currently configured to 00258 * exit on the first fatal error, false otherwise. 00259 * 00260 * @see #setExitOnFirstFatalError 00261 */ 00262 virtual bool 00263 getExitOnFirstFatalError() const; 00264 00265 /** 00266 * This method allows users to set the parser's behaviour when it 00267 * encounters the first fatal error. If set to true, the parser 00268 * will exit at the first fatal error. If false, then it will 00269 * report the error and continue processing. 00270 * 00271 * <p>The default value is 'true' and the parser exits on the 00272 * first fatal error.</p> 00273 * 00274 * @param newState The value specifying whether the parser should 00275 * continue or exit when it encounters the first 00276 * fatal error. 00277 * 00278 * @see #getExitOnFirstFatalError 00279 */ 00280 virtual void 00281 setExitOnFirstFatalError(bool newState); 00282 00283 /** 00284 * This method returns the location for an external schema document 00285 * for parsing. 00286 * 00287 * @return A string representing the location of the external schema document 00288 */ 00289 virtual const XalanDOMChar* 00290 getExternalSchemaLocation() const; 00291 00292 /** 00293 * This method sets the location for an external schema document 00294 * for parsing. 00295 * 00296 * @param location A string representing the location of the external schema document 00297 */ 00298 virtual void 00299 setExternalSchemaLocation(const XalanDOMChar* location); 00300 00301 /** 00302 * This method returns the location for an external schema document 00303 * for parsing. 00304 * 00305 * @return A string representing the location of the external schema document 00306 */ 00307 virtual const XalanDOMChar* 00308 getExternalNoNamespaceSchemaLocation() const; 00309 00310 /** 00311 * This method sets the location for an external schema document 00312 * for parsing. 00313 * 00314 * @param location A string representing the location of the external schema document 00315 */ 00316 virtual void 00317 setExternalNoNamespaceSchemaLocation(const XalanDOMChar* location); 00318 00319 #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE) 00320 /** 00321 * This API is deprecated. 00322 * 00323 * Create a XalanDocument proxy for an existing Xerces document. 00324 * The parser liaison owns the instance, and you must not delete 00325 * it. The liaison will delete it when reset() is called, or the 00326 * liaison is destroyed. 00327 * 00328 * @deprecated The Xerces DOM bridge is deprecated. 00329 * @param theXercesDocument The Xerces document. 00330 * @return a pointer to a new XalanDocument-derived instance. 00331 */ 00332 XalanDocument* 00333 createDocument(const DOM_Document_Type& theXercesDocument) 00334 { 00335 return createDocument(theXercesDocument, m_threadSafe, m_buildBridge); 00336 } 00337 00338 /** 00339 * This API is deprecated. 00340 * 00341 * Create a XalanDocument proxy for an existing Xerces document. 00342 * The parser liaison owns the instance, and you must not delete 00343 * it. The liaison will delete it when reset() is called, or the 00344 * liaison is destroyed. 00345 * 00346 * @deprecated The Xerces DOM bridge is deprecated. 00347 * @param theXercesDocument The Xerces document. 00348 * @param threadSafe If true, read access to the tree will be thread-safe (implies buildBridge == true). 00349 * @param buildBridge If true, the entire bridge structure is built. 00350 * @return a pointer to a new XalanDocument-derived instance. 00351 */ 00352 XalanDocument* 00353 createDocument( 00354 const DOM_Document_Type& theXercesDocument, 00355 bool threadSafe, 00356 bool buildBridge); 00357 #endif 00358 00359 /** 00360 * Create a XalanDocument proxy for an existing Xerces document. 00361 * The parser liaison owns the instance, and you must not delete 00362 * it. The liaison will delete it when reset() is called, or the 00363 * liaison is destroyed. 00364 * 00365 * @param theXercesDocument The Xerces document. 00366 * @return a pointer to a new XalanDocument-derived instance. 00367 */ 00368 XalanDocument* 00369 createDocument(const DOMDocument_Type* theXercesDocument) 00370 { 00371 return createDocument(theXercesDocument, m_threadSafe, m_buildWrapper, m_buildMaps); 00372 } 00373 00374 /** 00375 * Create a XalanDocument proxy for an existing Xerces document. 00376 * The parser liaison owns the instance, and you must not delete 00377 * it. The liaison will delete it when reset() is called, or the 00378 * liaison is destroyed. 00379 * 00380 * @param theXercesDocument The Xerces document. 00381 * @param threadSafe If true, read access to the tree will be thread-safe (implies buildWrapper == true). 00382 * @param buildWrapper If true, the entire wrapper structure is built. 00383 * @param buildMaps If true, the map of Xerces to Xalan nodes is always built. 00384 * @return a pointer to a new XalanDocument-derived instance. 00385 */ 00386 XalanDocument* 00387 createDocument( 00388 const DOMDocument_Type* theXercesDocument, 00389 bool threadSafe, 00390 bool buildWrapper, 00391 bool buildMaps = false); 00392 00393 #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE) 00394 /** 00395 * This API is deprecated. 00396 * 00397 * Map a pointer to a XalanDocument instance to its implementation 00398 * class pointer. Normally, you should have no reason for doing 00399 * this. The liaison will return a null pointer if it did not 00400 * create the instance passed. 00401 * 00402 * @deprecated The Xerces DOM bridge has been deprecated. 00403 * @param theDocument A pointer to a XalanDocument instance. 00404 * @return A pointer to the XercesDocumentBridge instance. 00405 */ 00406 XercesDocumentBridge* 00407 mapDocument(const XalanDocument* theDocument) const; 00408 #endif 00409 00410 /** 00411 * Map a pointer to a XalanDocument instance to its implementation 00412 * class pointer. Normally, you should have no reason for doing 00413 * this. The liaison will return a null pointer if it did not 00414 * create the instance passed. 00415 * 00416 * @param theDocument A pointer to a XalanDocument instance. 00417 * @return A pointer to the XercesDocumentWrapper instance. 00418 */ 00419 XercesDocumentWrapper* 00420 mapDocumentToWrapper(const XalanDocument* theDocument) const; 00421 00422 #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE) 00423 /** 00424 * This API is deprecated. 00425 * 00426 * Map a pointer to a XalanDocument instance to its corresponding 00427 * class pointer. Normally, you should have no reason for doing 00428 * this. The liaison will return a null pointer if it did not 00429 * create the instance passed. 00430 * 00431 * @deprecated The Xerces DOM bridge has been deprecated. 00432 * @param theDocument A pointer to a XalanDocument instance. 00433 * @return A pointer to the XercesDocumentBridge instance. 00434 */ 00435 DOM_Document_Type 00436 mapXercesDocument(const XalanDocument* theDocument) const; 00437 #endif 00438 00439 /** 00440 * Map a pointer to a XalanDocument instance to its corresponding 00441 * class pointer. Normally, you should have no reason for doing 00442 * this. The liaison will return a null pointer if it did not 00443 * create the instance passed. 00444 * 00445 * @param theDocument A pointer to a XalanDocument instance. 00446 * @return A pointer to the XercesDocumentBridge instance. 00447 */ 00448 const DOMDocument_Type* 00449 mapToXercesDocument(const XalanDocument* theDocument) const; 00450 00451 // Implementations for SAX ErrorHandler 00452 00453 virtual void 00454 warning(const SAXParseExceptionType& exception); 00455 00456 virtual void 00457 error(const SAXParseExceptionType& exception); 00458 00459 virtual void 00460 fatalError(const SAXParseExceptionType& exception); 00461 00462 virtual void 00463 resetErrors(); 00464 00465 struct DocumentEntry 00466 { 00467 #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE) 00468 bool m_isDeprecated; 00469 00470 bool 00471 isDeprecated() const 00472 { 00473 return m_isDeprecated; 00474 } 00475 #else 00476 bool 00477 isDeprecated() const 00478 { 00479 return false; 00480 } 00481 #endif 00482 00483 bool m_isOwned; 00484 00485 bool 00486 isOwned() const 00487 { 00488 return m_isOwned; 00489 } 00490 00491 #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE) 00492 union 00493 { 00494 XercesDocumentBridge* m_bridge; 00495 XercesDocumentWrapper* m_wrapper; 00496 }; 00497 00498 DocumentEntry& 00499 operator=(XercesDocumentBridge* theBridge) 00500 { 00501 m_isDeprecated = true; 00502 00503 m_bridge = theBridge; 00504 00505 m_isOwned = true; 00506 00507 return *this; 00508 } 00509 00510 DocumentEntry& 00511 operator=(XercesDocumentWrapper* theWrapper) 00512 { 00513 m_isDeprecated = false; 00514 00515 m_wrapper = theWrapper; 00516 00517 m_isOwned = true; 00518 00519 return *this; 00520 } 00521 #else 00522 XercesDocumentWrapper* m_wrapper; 00523 00524 DocumentEntry& 00525 operator=(XercesDocumentWrapper* theWrapper) 00526 { 00527 m_wrapper = theWrapper; 00528 00529 m_isOwned = true; 00530 00531 return *this; 00532 } 00533 #endif 00534 }; 00535 00536 typedef XalanMap<const XalanDocument*, DocumentEntry> DocumentMapType; 00537 00538 /** 00539 * This API is deprecated. 00540 * 00541 * This functions returns the state of the liaison's build-bridge-nodes flag. 00542 * 00543 * @deprecated The Xerces DOM bridge is deprecated. 00544 * @return true, if the bridge nodes are automatically built, false otherwise. 00545 */ 00546 bool 00547 getBuildBridgeNodes() const 00548 00549 { 00550 return m_buildBridge; 00551 } 00552 00553 /** 00554 * This API is deprecated. 00555 * 00556 * This functions sets the state of the liaison's build-bridge-nodes flag. 00557 * This flag must be set for the document to be thread safe. It can also be 00558 * set to true to increase performance. If this flag is set to false, then 00559 * the thread-safe flag will also be set to false. 00560 * 00561 * @deprecated The Xerces DOM bridge is deprecated. 00562 * @param newState The new state for the flag. 00563 * 00564 */ 00565 void 00566 setBuildBridgeNodes(bool newState) 00567 { 00568 m_buildBridge = newState; 00569 00570 if (newState == false) 00571 { 00572 m_threadSafe = false; 00573 } 00574 } 00575 00576 /** 00577 * This functions returns the state of the liaison's build-wrapper-nodes flag. 00578 * 00579 * @return true, if the wrapper nodes are automatically built, false otherwise. 00580 */ 00581 bool 00582 getBuildWrapperNodes() const 00583 00584 { 00585 return m_buildWrapper; 00586 } 00587 00588 /** 00589 * This functions sets the state of the liaison's build-wrapper-nodes flag. 00590 * This flag must be set for the document to be thread safe. It can also be 00591 * set to true to increase performance. If this flag is set to false, then 00592 * the thread-safe flag will also be set to false. 00593 * 00594 * @param newState The new state for the flag. 00595 * 00596 */ 00597 void 00598 setBuildWrapperNodes(bool newState) 00599 { 00600 m_buildWrapper = newState; 00601 00602 if (newState == false) 00603 { 00604 m_threadSafe = false; 00605 } 00606 } 00607 00608 /** 00609 * This functions returns the state of the liaison's thread-safe flag. 00610 * If true, documents created will be safe when data is read. By default, 00611 * documents are _not_ thread-safe. 00612 * 00613 * Note -- modifications are _never_ synchronized. 00614 * 00615 * @return true, if the new documents will be thread safe, false otherwise. 00616 */ 00617 bool 00618 getThreadSafe() const 00619 00620 { 00621 return m_threadSafe; 00622 } 00623 00624 /** 00625 * This functions sets the state of the liaison's thread-safe flag. 00626 * This flag must be set for the document to be thread safe. If this 00627 * flag is set to true, then the build-bridge-nodes flag will also be 00628 * set to true. 00629 * 00630 * @param newState The new state for the flag. 00631 * 00632 */ 00633 void 00634 setThreadSafe(bool newState) 00635 { 00636 m_threadSafe = newState; 00637 00638 if (m_threadSafe == true) 00639 { 00640 m_buildWrapper = true; 00641 m_buildBridge = true; 00642 } 00643 } 00644 00645 /** 00646 * This functions returns the state of the liaison's buildMaps flag. 00647 * If true, maps will be created to allow mapping of Xalan<->Xerces mapping 00648 * in both directions for XercesWrapper classes. 00649 * 00650 * @return true, if the new documents will be built with Maps 00651 */ 00652 bool 00653 getBuildMaps() const 00654 00655 { 00656 return m_buildMaps; 00657 } 00658 00659 /** 00660 * This functions sets the state of the liaison's buildMaps flag. 00661 * When this flag is true, maps will be built providing Xerces<->Xalan 00662 * mapping in Wrapper classes. 00663 * 00664 * @note The maps created use a large amount of memory. If only 00665 * Xalan->Xerces node mapping is required, do not set this to true. 00666 * 00667 * @param newState The new state for the flag. 00668 * 00669 */ 00670 void 00671 setBuildMaps(bool newState) 00672 { 00673 m_buildMaps = newState; 00674 } 00675 00676 typedef XERCES_CPP_NAMESPACE_QUALIFIER XercesDOMParser DOMParserType; 00677 00678 protected: 00679 00680 static void 00681 formatErrorMessage( 00682 const SAXParseExceptionType& e, 00683 XalanDOMString& theMessage); 00684 00685 #if defined(XALAN_BUILD_DEPRECATED_DOM_BRIDGE) 00686 /** 00687 * Create a XalanDocument proxy for an existing Xerces document. 00688 * 00689 * This API is deprecated. 00690 * 00691 * @param theXercesDocument The Xerces document. 00692 * @param threadSafe If true, read access to the tree will be thread-safe (implies buildBridge == true). 00693 * @param buildBridge If true, the entire bridge structure is built. 00694 * @return a pointer to a new XercesDocumentBridge instance. 00695 */ 00696 XercesDocumentBridge* 00697 doCreateDocument( 00698 const DOM_Document_Type& theXercesDocument, 00699 bool threadSafe, 00700 bool buildBridge); 00701 #endif 00702 00703 /** 00704 * Create a XalanDocument proxy for an existing Xerces document. 00705 * 00706 * @param theXercesDocument The Xerces document. 00707 * @param threadSafe If true, read access to the tree will be thread-safe (implies buildBridge == true). 00708 * @param buildWrapper If true, the entire bridge structure is built. 00709 * @param buildMaps If true, the map of Xerces to Xalan nodes is always built. 00710 * @return a pointer to a new XercesDocumentWrapper instance. 00711 */ 00712 XercesDocumentWrapper* 00713 doCreateDocument( 00714 const DOMDocument_Type* theXercesDocument, 00715 bool threadSafe, 00716 bool buildWrapper, 00717 bool buildMaps, 00718 bool isOwned); 00719 00720 private: 00721 00722 void 00723 ensureDOMParser(); 00724 00725 DOMParserType* 00726 createDOMParser(); 00727 00728 SAXParserType* 00729 createSAXParser(); 00730 00731 00732 00733 // Data members... 00734 int m_indent; 00735 00736 bool m_useValidation; 00737 00738 bool m_includeIgnorableWhitespace; 00739 00740 bool m_doNamespaces; 00741 00742 bool m_exitOnFirstFatalError; 00743 00744 EntityResolver* m_entityResolver; 00745 00746 XMLEntityResolver* m_xmlEntityResolver; 00747 00748 ErrorHandler* m_errorHandler; 00749 00750 XalanDOMString m_externalSchemaLocation; 00751 00752 XalanDOMString m_externalNoNamespaceSchemaLocation; 00753 00754 DocumentMapType m_documentMap; 00755 00756 bool m_buildWrapper; 00757 00758 bool m_buildBridge; 00759 00760 bool m_threadSafe; 00761 00762 bool m_buildMaps; 00763 00764 ExecutionContext* m_executionContext; 00765 00766 DOMParserType* m_domParser; 00767 }; 00768 00769 00770 00771 XALAN_CPP_NAMESPACE_END 00772 00773 00774 00775 #endif // XercesPARSERLIAISON_HEADER_GUARD_1357924680
Doxygen and GraphViz are used to generate this API documentation from the Xalan-C header files.
Xalan-C++ XSLT Processor Version 1.11 |
|