From ad53dcd44c6f0bf916d5f8a51e82bf4aef80eb8d Mon Sep 17 00:00:00 2001 From: David Abram Cargill <cargilld@apache.org> Date: Wed, 23 Feb 2005 19:07:59 +0000 Subject: [PATCH] Various PSVI fixes from Mike Boos. git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@176322 13f79535-47bb-0310-9956-ffa450edef68 --- samples/PSVIWriter/PSVIUni.cpp | 15 +++++++---- samples/PSVIWriter/PSVIUni.hpp | 5 ++-- samples/PSVIWriter/PSVIWriter.cpp | 6 +++++ samples/PSVIWriter/PSVIWriterHandlers.cpp | 25 +++++++++++++------ samples/PSVIWriter/PSVIWriterHandlers.hpp | 25 +++++++++++++++++++ .../datatype/DatatypeValidatorFactory.cpp | 14 +++++++++-- 6 files changed, 73 insertions(+), 17 deletions(-) diff --git a/samples/PSVIWriter/PSVIUni.cpp b/samples/PSVIWriter/PSVIUni.cpp index 02695795c..2de133a04 100644 --- a/samples/PSVIWriter/PSVIUni.cpp +++ b/samples/PSVIWriter/PSVIUni.cpp @@ -285,6 +285,11 @@ const XMLCh PSVIUni::fgElementDeclaration[] = chLatin_p, chLatin_s, chLatin_v, chColon, chLatin_e, chLatin_l, chLatin_e, chLatin_m, chLatin_e, chLatin_n, chLatin_t, chLatin_D, chLatin_e, chLatin_c, chLatin_l, chLatin_a, chLatin_r, chLatin_a, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chNull }; +const XMLCh PSVIUni::fgFacetFixed[] = +{ + chLatin_p, chLatin_s, chLatin_v, chColon, chLatin_f, chLatin_i, chLatin_x, chLatin_e, chLatin_d, chNull +}; + const XMLCh PSVIUni::fgFacets[] = { chLatin_p, chLatin_s, chLatin_v, chColon, chLatin_f, chLatin_a, chLatin_c, chLatin_e, chLatin_t, chLatin_s, chNull @@ -300,11 +305,6 @@ const XMLCh PSVIUni::fgFinal[] = chLatin_p, chLatin_s, chLatin_v, chColon, chLatin_f, chLatin_i, chLatin_n, chLatin_a, chLatin_l, chNull }; -const XMLCh PSVIUni::fgFixed[] = -{ - chLatin_p, chLatin_s, chLatin_v, chColon, chLatin_f, chLatin_i, chLatin_x, chLatin_e, chLatin_d, chNull -}; - const XMLCh PSVIUni::fgFundamentalFacets[] = { chLatin_p, chLatin_s, chLatin_v, chColon, chLatin_f, chLatin_u, chLatin_n, chLatin_d, chLatin_a, chLatin_m, chLatin_e, chLatin_n, chLatin_t, chLatin_a, chLatin_l, chLatin_F, chLatin_a, chLatin_c, chLatin_e, chLatin_t, chLatin_s, chNull @@ -795,6 +795,11 @@ const XMLCh PSVIUni::fgValid[] = chLatin_v, chLatin_a, chLatin_l, chLatin_i, chLatin_d, chNull }; +const XMLCh PSVIUni::fgVCFixed[] = +{ + chLatin_f, chLatin_i, chLatin_x, chLatin_e, chLatin_d, chNull +}; + const XMLCh PSVIUni::fgXMLChNull[] = { chNull diff --git a/samples/PSVIWriter/PSVIUni.hpp b/samples/PSVIWriter/PSVIUni.hpp index 0e0b14cc7..2529ecaa8 100644 --- a/samples/PSVIWriter/PSVIUni.hpp +++ b/samples/PSVIWriter/PSVIUni.hpp @@ -83,9 +83,9 @@ public : static const XMLCh fgDocumentLocation[]; static const XMLCh fgElementDeclaration[]; static const XMLCh fgFacets[]; + static const XMLCh fgFacetFixed[]; static const XMLCh fgFields[]; - static const XMLCh fgFinal[]; - static const XMLCh fgFixed[]; + static const XMLCh fgFinal[]; static const XMLCh fgFundamentalFacets[]; static const XMLCh fgIdentityConstraintCategory[]; static const XMLCh fgIdentityConstraintDefinition[]; @@ -186,6 +186,7 @@ public : static const XMLCh fgUnique[]; static const XMLCh fgUnknown[]; static const XMLCh fgValid[]; + static const XMLCh fgVCFixed[]; static const XMLCh fgXMLChNull[]; //PSVI Element Types (Shortened) diff --git a/samples/PSVIWriter/PSVIWriter.cpp b/samples/PSVIWriter/PSVIWriter.cpp index 8ee86b200..25639583a 100644 --- a/samples/PSVIWriter/PSVIWriter.cpp +++ b/samples/PSVIWriter/PSVIWriter.cpp @@ -17,6 +17,9 @@ //REVISIT /* * $Log$ + * Revision 1.7 2005/02/23 19:07:59 cargilld + * Various PSVI fixes from Mike Boos. + * * Revision 1.6 2005/01/12 20:43:21 cargilld * Remove warning messages. * @@ -234,6 +237,9 @@ int main(int argC, char* argV[]) else handler = new PSVIWriterHandlers(psviFormatter, errorFormatter); + PSVIAdvancedHandler* advancedHandler = new PSVIAdvancedHandler(handler); + parser->installAdvDocHandler(advancedHandler); + parser->setPSVIHandler(handler); parser->setContentHandler(handler); parser->setLexicalHandler(handler); diff --git a/samples/PSVIWriter/PSVIWriterHandlers.cpp b/samples/PSVIWriter/PSVIWriterHandlers.cpp index 82977540f..b8c5a3a2c 100644 --- a/samples/PSVIWriter/PSVIWriterHandlers.cpp +++ b/samples/PSVIWriter/PSVIWriterHandlers.cpp @@ -213,10 +213,6 @@ void PSVIWriterHandlers::startDocument() { writeOpen(PSVIUni::fgDocument, fAttrList); incIndent(); - sendElementValue(PSVIUni::fgCharacterEncodingScheme, fFormatter->getEncodingName()); - sendElementEmpty(PSVIUni::fgStandalone); - sendElementValue(PSVIUni::fgVersion, PSVIUni::fgOnePointZero); - fElementChildren->push(false); } @@ -822,7 +818,7 @@ void PSVIWriterHandlers::processFacets(XSFacetList* facets, XSMultiValueFacetLis XSFacet* facet = facets->elementAt(facetCount); sendIndentedElement(translateFacet(facet->getFacetKind())); sendElementValue(PSVIUni::fgValue, facet->getLexicalFacetValue()); - sendElementValue(PSVIUni::fgFixed, translateBool(facet->isFixed())); + sendElementValue(PSVIUni::fgFacetFixed, translateBool(facet->isFixed())); processAnnotation(facet->getAnnotation()); sendUnindentedElement(translateFacet(facet->getFacetKind())); } @@ -835,7 +831,7 @@ void PSVIWriterHandlers::processFacets(XSFacetList* facets, XSMultiValueFacetLis for (unsigned int i=0; i < values->size(); i++) { sendElementValue(PSVIUni::fgValue, values->elementAt(i)); } - sendElementValue(PSVIUni::fgFixed, translateBool(multiFacet->isFixed())); + sendElementValue(PSVIUni::fgFacetFixed, translateBool(multiFacet->isFixed())); processAnnotations(multiFacet->getAnnotations()); sendUnindentedElement(translateFacet(multiFacet->getFacetKind())); } @@ -1356,7 +1352,7 @@ const XMLCh* PSVIWriterHandlers::translateValueConstraint(XSConstants::VALUE_CON case XSConstants::VALUE_CONSTRAINT_DEFAULT : return PSVIUni::fgDefault; case XSConstants::VALUE_CONSTRAINT_FIXED : - return PSVIUni::fgFixed; + return PSVIUni::fgVCFixed; default : return PSVIUni::fgUnknown; } @@ -1938,4 +1934,17 @@ void PSVIWriterHandlers::processActualValue(PSVIItem* item) delete obj; -} \ No newline at end of file +} + +void PSVIAdvancedHandler::XMLDecl(const XMLCh* const versionStr, const XMLCh* const encodingStr, const XMLCh* const standaloneStr, const XMLCh* const autoEncodingStr) +{ + if (encodingStr && *encodingStr) + fWriterHandler->sendElementValue(PSVIUni::fgCharacterEncodingScheme, encodingStr); + else + fWriterHandler->sendElementValue(PSVIUni::fgCharacterEncodingScheme, autoEncodingStr); + if (standaloneStr && *standaloneStr) + fWriterHandler->sendElementValue(PSVIUni::fgStandalone, standaloneStr); + else + fWriterHandler->sendElementEmpty(PSVIUni::fgStandalone); + fWriterHandler->sendElementValue(PSVIUni::fgVersion, versionStr); +} diff --git a/samples/PSVIWriter/PSVIWriterHandlers.hpp b/samples/PSVIWriter/PSVIWriterHandlers.hpp index 070d649c6..3ae4fbc81 100644 --- a/samples/PSVIWriter/PSVIWriterHandlers.hpp +++ b/samples/PSVIWriter/PSVIWriterHandlers.hpp @@ -48,6 +48,7 @@ #include <xercesc/framework/psvi/XSTypeDefinition.hpp> #include <xercesc/framework/psvi/XSWildcard.hpp> #include <xercesc/framework/XMLFormatter.hpp> +#include <xercesc/framework/XMLDocumentHandler.hpp> #include <xercesc/dom/DOMElement.hpp> #include <xercesc/dom/DOMNamedNodeMap.hpp> #include <xercesc/util/ValueStackOf.hpp> @@ -107,6 +108,7 @@ public: PSVIWriterHandlers(XMLFormatter* outputFormatter, XMLFormatter* errorFormatter = NULL); ~PSVIWriterHandlers(); + friend class PSVIAdvancedHandler; // ----------------------------------------------------------------------- // Convenience Utility // ----------------------------------------------------------------------- @@ -278,6 +280,29 @@ protected: RefVectorOf<AttrInfo>* fAttributesInfo; }; +class PSVIAdvancedHandler: public XMLDocumentHandler { +public: + PSVIAdvancedHandler(PSVIWriterHandlers* writerHandler) : XMLDocumentHandler(), fWriterHandler(writerHandler) {} + ~PSVIAdvancedHandler() {} + void docCharacters(const XMLCh* const, const unsigned int, const bool) {} + void docComment(const XMLCh* const) {} + void docPI(const XMLCh* const, const XMLCh* const) {} + void endDocument() {} + void endElement(const XMLElementDecl&, const unsigned int, const bool, const XMLCh* const) {} + void endEntityReference(const XMLEntityDecl&) {} + + void ignorableWhitespace(const XMLCh* const chars, const unsigned int length, const bool cdataSection) {} + + void resetDocument() {} + void startDocument() {} + void startElement(const XMLElementDecl&, const unsigned int, const XMLCh* const, const RefVectorOf<XMLAttr>& + ,const unsigned int, const bool, const bool) {} + void startEntityReference(const XMLEntityDecl&) {}; + + void XMLDecl(const XMLCh* const versionStr, const XMLCh* const encodingStr, const XMLCh* const standaloneStr, const XMLCh* const autoEncodingStr); +private: + PSVIWriterHandlers* fWriterHandler; +}; #endif diff --git a/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp b/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp index 441c37ba4..aa86c4ab4 100644 --- a/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp +++ b/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.31 2005/02/23 19:07:59 cargilld + * Various PSVI fixes from Mike Boos. + * * Revision 1.30 2004/10/20 15:19:07 knoaman * Allow option of initializing static data in XMLPlatformUtils::Initialize * @@ -879,9 +882,16 @@ DatatypeValidator* DatatypeValidatorFactory::createDatatypeValidator // Set PSVI information for Ordered, Numeric, Bounded & Finite datatypeValidator->setOrdered(baseValidator->getOrdered()); datatypeValidator->setNumeric(baseValidator->getNumeric()); + RefHashTableOf<KVStringPair>* baseFacets = baseValidator->getFacets(); if (facets && - ((facets->get(SchemaSymbols::fgELT_MININCLUSIVE) || facets->get(SchemaSymbols::fgELT_MINEXCLUSIVE)) && - (facets->get(SchemaSymbols::fgELT_MAXINCLUSIVE) || facets->get(SchemaSymbols::fgELT_MAXEXCLUSIVE)))) + ((facets->get(SchemaSymbols::fgELT_MININCLUSIVE) || + facets->get(SchemaSymbols::fgELT_MINEXCLUSIVE) || + (baseFacets && (baseFacets->get(SchemaSymbols::fgELT_MININCLUSIVE) || + baseFacets->get(SchemaSymbols::fgELT_MINEXCLUSIVE))))) && + (facets->get(SchemaSymbols::fgELT_MAXINCLUSIVE) || + facets->get(SchemaSymbols::fgELT_MAXEXCLUSIVE) || + (baseFacets && ((baseFacets->get(SchemaSymbols::fgELT_MAXINCLUSIVE) || + baseFacets->get(SchemaSymbols::fgELT_MAXEXCLUSIVE)))))) { datatypeValidator->setBounded(true); } -- GitLab