dbertoni    2002/08/14 17:59:53

  Modified:    c/src/XalanSourceTree XalanSourceTreeParserLiaison.cpp
                        XalanSourceTreeParserLiaison.hpp
  Log:
  New properties.
  
  Revision  Changes    Path
  1.30      +256 -120  xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.cpp
  
  Index: XalanSourceTreeParserLiaison.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.cpp,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- XalanSourceTreeParserLiaison.cpp  10 Jul 2002 20:56:08 -0000      1.29
  +++ XalanSourceTreeParserLiaison.cpp  15 Aug 2002 00:59:53 -0000      1.30
  @@ -83,7 +83,7 @@
   
   
   // http://xml.org/sax/features/validation
  -const XalanDOMChar   XalanSourceTreeParserLiaison::validationString[] = {
  +const XalanDOMChar   XalanSourceTreeParserLiaison::s_validationString[] = {
        XalanUnicode::charLetter_h,
        XalanUnicode::charLetter_t,
        XalanUnicode::charLetter_t,
  @@ -128,7 +128,7 @@
   
   
   // http://apache.org/xml/features/validation/dynamic
  -const XalanDOMChar   XalanSourceTreeParserLiaison::dynamicValidationString[] = {
  +const XalanDOMChar   XalanSourceTreeParserLiaison::s_dynamicValidationString[] = {
        XalanUnicode::charLetter_h,
        XalanUnicode::charLetter_t,
        XalanUnicode::charLetter_t,
  @@ -184,7 +184,7 @@
   
   
   // http://xml.org/sax/features/namespaces
  -const XalanDOMChar   XalanSourceTreeParserLiaison::namespacesString[] = {
  +const XalanDOMChar   XalanSourceTreeParserLiaison::s_namespacesString[] = {
        XalanUnicode::charLetter_h,
        XalanUnicode::charLetter_t,
        XalanUnicode::charLetter_t,
  @@ -229,7 +229,7 @@
   
   
   // http://xml.org/sax/features/namespace-prefixes
  -const XalanDOMChar   XalanSourceTreeParserLiaison::namespacePrefixesString[] = {
  +const XalanDOMChar   XalanSourceTreeParserLiaison::s_namespacePrefixesString[] = {
        XalanUnicode::charLetter_h,
        XalanUnicode::charLetter_t,
        XalanUnicode::charLetter_t,
  @@ -281,7 +281,7 @@
   
   
   // http://apache.org/xml/features/validation/schema
  -const XalanDOMChar   XalanSourceTreeParserLiaison::schemaString[] =
  +const XalanDOMChar   XalanSourceTreeParserLiaison::s_schemaString[] =
   {
        XalanUnicode::charLetter_h,
        XalanUnicode::charLetter_t,
  @@ -336,12 +336,163 @@
   
   
   
  +// http://apache.org/xml/properties/schema/external-schemaLocation
  +const XalanDOMChar   XalanSourceTreeParserLiaison::s_externalSchemaLocationString[] 
=
  +{
  +     XalanUnicode::charLetter_h,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charColon,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_h,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charFullStop,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_r,
  +     XalanUnicode::charLetter_g,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_x,
  +     XalanUnicode::charLetter_m,
  +     XalanUnicode::charLetter_l,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charLetter_r,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_r,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_i,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_s,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_s,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_h,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_m,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_x,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_r,
  +     XalanUnicode::charLetter_n,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_l,
  +     XalanUnicode::charHyphenMinus,
  +     XalanUnicode::charLetter_s,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_h,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_m,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_L,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_i,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_n,
  +     0
  +};
  +
  +
  +
  +// http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation
  +const XalanDOMChar   
XalanSourceTreeParserLiaison::s_externalNoNamespaceSchemaLocationString[] =
  +{
  +     XalanUnicode::charLetter_h,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charColon,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_h,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charFullStop,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_r,
  +     XalanUnicode::charLetter_g,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_x,
  +     XalanUnicode::charLetter_m,
  +     XalanUnicode::charLetter_l,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charLetter_r,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_r,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_i,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_s,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_s,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_h,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_m,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charSolidus,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_x,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_r,
  +     XalanUnicode::charLetter_n,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_l,
  +     XalanUnicode::charHyphenMinus,
  +     XalanUnicode::charLetter_n,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_N,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_m,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_s,
  +     XalanUnicode::charLetter_p,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_S,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_h,
  +     XalanUnicode::charLetter_e,
  +     XalanUnicode::charLetter_m,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_L,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_c,
  +     XalanUnicode::charLetter_a,
  +     XalanUnicode::charLetter_t,
  +     XalanUnicode::charLetter_i,
  +     XalanUnicode::charLetter_o,
  +     XalanUnicode::charLetter_n,
  +     0
  +};
  +
  +
   
   XalanSourceTreeParserLiaison::XalanSourceTreeParserLiaison(
                        XalanSourceTreeDOMSupport&      /* theSupport */) :
        m_xercesParserLiaison(),
        m_documentMap(),
  -     m_persistentDocumentMap(),
        m_poolAllText(true)
   {
   }
  @@ -351,7 +502,6 @@
   XalanSourceTreeParserLiaison::XalanSourceTreeParserLiaison() :
        m_xercesParserLiaison(),
        m_documentMap(),
  -     m_persistentDocumentMap(),
        m_poolAllText(true)
   {
   }
  @@ -365,13 +515,6 @@
   #if !defined(XALAN_NO_NAMESPACES)
        using std::for_each;
   #endif
  -
  -     // Delete any persistent documents.
  -     for_each(m_persistentDocumentMap.begin(),
  -                      m_persistentDocumentMap.end(),
  -                      makeMapValueDeleteFunctor(m_persistentDocumentMap));
  -
  -     m_persistentDocumentMap.clear();
   }
   
   
  @@ -429,58 +572,14 @@
   {
        XalanSourceTreeContentHandler   
theContentHandler(createXalanSourceTreeDocument());
   
  -     XalanAutoPtr<SAX2XMLReader>             
theReader(XMLReaderFactory::createXMLReader());
  -
  -     const bool      fValidate = m_xercesParserLiaison.getUseValidation();
  -
  -     if (fValidate == false)
  -     {
  -             theReader->setFeature(
  -                     validationString,
  -                     false);
  -
  -             theReader->setFeature(
  -                     schemaString,
  -                     false);
  -     }
  -     else
  -     {
  -             theReader->setFeature(
  -                     dynamicValidationString,
  -                     true);
  -
  -             theReader->setFeature(
  -                     schemaString,
  -                     true);
  -     }
  -
  -     theReader->setFeature(
  -             namespacesString,
  -             true);
  -
  -     theReader->setFeature(
  -             namespacePrefixesString,
  -             true);
  +     XalanAutoPtr<SAX2XMLReader>             theReader(createReader());
   
        theReader->setContentHandler(&theContentHandler);
   
        theReader->setDTDHandler(&theContentHandler);
   
  -     ErrorHandler* const             theHandler = getErrorHandler();
  -
  -     if (theHandler == 0)
  -     {
  -             theReader->setErrorHandler(&m_xercesParserLiaison);
  -     }
  -     else
  -     {
  -             theReader->setErrorHandler(theHandler);
  -     }
  -
        theReader->setLexicalHandler(&theContentHandler);
   
  -     theReader->setEntityResolver(getEntityResolver());
  -
        theReader->parse(inputSource);
   
        return theContentHandler.getDocument();
  @@ -569,36 +668,14 @@
                        LexicalHandler*                 theLexicalHandler,
                        const XalanDOMString&   /* theIdentifier */)
   {
  -     XalanAutoPtr<SAX2XMLReader>             
theReader(XMLReaderFactory::createXMLReader());
  -
  -     theReader->setFeature(
  -             validationString,
  -             m_xercesParserLiaison.getUseValidation());
  +     XalanAutoPtr<SAX2XMLReader>             theReader(createReader());
   
        theReader->setContentHandler(&theContentHandler);
   
        theReader->setDTDHandler(theDTDHandler);
   
  -     ErrorHandler* const             theHandler = getErrorHandler();
  -
  -     if (theHandler == 0)
  -     {
  -             theReader->setErrorHandler(&m_xercesParserLiaison);
  -     }
  -     else
  -     {
  -             theReader->setErrorHandler(theHandler);
  -     }
  -
        theReader->setLexicalHandler(theLexicalHandler);
   
  -     EntityResolver* const   theResolver = getEntityResolver();
  -
  -     if (theResolver != 0)
  -     {
  -             theReader->setEntityResolver(theResolver);
  -     }
  -
        theReader->parse(theInputSource);
   }
   
  @@ -684,29 +761,45 @@
   
   
   
  +const XalanDOMChar*
  +XalanSourceTreeParserLiaison::getExternalSchemaLocation() const
  +{
  +     return m_xercesParserLiaison.getExternalSchemaLocation();
  +}
  +
  +
  +
  +void
  +XalanSourceTreeParserLiaison::setExternalSchemaLocation(const XalanDOMChar*         
 location)
  +{
  +     m_xercesParserLiaison.setExternalSchemaLocation(location);
  +}
  +
  +
  +
  +const XalanDOMChar*
  +XalanSourceTreeParserLiaison::getExternalNoNamespaceSchemaLocation() const
  +{
  +     return m_xercesParserLiaison.getExternalNoNamespaceSchemaLocation();
  +}
  +
  +
  +
  +void
  +XalanSourceTreeParserLiaison::setExternalNoNamespaceSchemaLocation(const 
XalanDOMChar*       location)
  +{
  +     m_xercesParserLiaison.setExternalNoNamespaceSchemaLocation(location);
  +}
  +
  +
  +
   XalanSourceTreeDocument*
   XalanSourceTreeParserLiaison::mapDocument(const XalanDocument*       theDocument) 
const
   {
        DocumentMapType::const_iterator         i =
                m_documentMap.find(theDocument);
   
  -     if (i != m_documentMap.end())
  -     {
  -             return (*i).second;
  -     }
  -     else
  -     {
  -             i =     m_persistentDocumentMap.find(theDocument);
  -
  -             if (i != m_persistentDocumentMap.end())
  -             {
  -                     return (*i).second;
  -             }
  -             else
  -             {
  -                     return 0;
  -             }
  -     }
  +     return i != m_documentMap.end() ? (*i).second : 0;
   }
   
   
  @@ -724,43 +817,86 @@
   
   
   
  -bool
  -XalanSourceTreeParserLiaison::setPersistent(XalanSourceTreeDocument* theDocument)
  +SAX2XMLReader*
  +XalanSourceTreeParserLiaison::createReader()
   {
  -     const DocumentMapType::iterator         i =
  -             m_documentMap.find(theDocument);
  +     XalanAutoPtr<SAX2XMLReader>             
theReader(XMLReaderFactory::createXMLReader());
  +
  +     const bool      fValidate = m_xercesParserLiaison.getUseValidation();
   
  -     if (i != m_documentMap.end())
  +     if (fValidate == false)
        {
  -             return false;
  +             theReader->setFeature(
  +                     s_validationString,
  +                     false);
  +
  +             theReader->setFeature(
  +                     s_schemaString,
  +                     false);
        }
        else
        {
  -             m_persistentDocumentMap[(*i).first] = (*i).second;
  -
  -             m_documentMap.erase(i);
  +             theReader->setFeature(
  +                     s_dynamicValidationString,
  +                     true);
   
  -             return true;
  +             theReader->setFeature(
  +                     s_schemaString,
  +                     true);
        }
  -}
   
  +     theReader->setFeature(
  +             s_namespacesString,
  +             true);
   
  -bool
  -XalanSourceTreeParserLiaison::unsetPersistent(XalanSourceTreeDocument*       
theDocument)
  -{
  -     const DocumentMapType::iterator         i =
  -             m_persistentDocumentMap.find(theDocument);
  +     theReader->setFeature(
  +             s_namespacePrefixesString,
  +             true);
  +
  +     ErrorHandler* const             theHandler = getErrorHandler();
   
  -     if (i != m_persistentDocumentMap.end())
  +     if (theHandler == 0)
        {
  -             return false;
  +             theReader->setErrorHandler(&m_xercesParserLiaison);
        }
        else
        {
  -             m_documentMap[(*i).first] = (*i).second;
  +             theReader->setErrorHandler(theHandler);
  +     }
   
  -             m_persistentDocumentMap.erase(i);
  +     theReader->setEntityResolver(getEntityResolver());
   
  -             return true;
  +     {
  +             const XalanDOMChar* const       theLocation =
  +                     getExternalSchemaLocation();
  +
  +             if (theLocation != 0)
  +             {
  +                     theReader->setProperty(
  +                             s_externalSchemaLocationString,
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (void*)theLocation);
  +#else
  +                             const_cast<XalanDOMChar*>(theLocation));
  +#endif
  +             }
        }
  +
  +     {
  +             const XalanDOMChar* const       theLocation =
  +                     getExternalNoNamespaceSchemaLocation();
  +
  +             if (theLocation != 0)
  +             {
  +                     theReader->setProperty(
  +                             s_externalNoNamespaceSchemaLocationString,
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (void*)theLocation);
  +#else
  +                             const_cast<XalanDOMChar*>(theLocation));
  +#endif
  +             }
  +     }
  +
  +     return theReader.release();
   }
  
  
  
  1.20      +51 -13    xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.hpp
  
  Index: XalanSourceTreeParserLiaison.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.hpp,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- XalanSourceTreeParserLiaison.hpp  10 Jul 2002 20:56:08 -0000      1.19
  +++ XalanSourceTreeParserLiaison.hpp  15 Aug 2002 00:59:53 -0000      1.20
  @@ -76,6 +76,7 @@
   class ContentHandler;
   class DTDHandler;
   class LexicalHandler;
  +class SAX2XMLReader;
   class XalanSourceTreeDOMSupport;
   class XalanSourceTreeDocument;
   
  @@ -315,6 +316,42 @@
        virtual void
        setExitOnFirstFatalError(bool   newState);
   
  +     /**
  +       * This method returns the location for an external schema document
  +       * for parsing.
  +       *
  +       * @return A string representing the location of the external schema document
  +       */
  +     virtual const XalanDOMChar*
  +     getExternalSchemaLocation() const;
  +
  +     /**
  +       * This method sets the location for an external schema document
  +       * for parsing.
  +       *
  +       * @param location A string representing the location of the external schema 
document
  +       */
  +     virtual void
  +     setExternalSchemaLocation(const XalanDOMChar*   location);
  +
  +     /**
  +       * This method returns the location for an external schema document
  +       * for parsing.
  +       *
  +       * @return A string representing the location of the external schema document
  +       */
  +     virtual const XalanDOMChar*
  +     getExternalNoNamespaceSchemaLocation() const;
  +
  +     /**
  +       * This method sets the location for an external schema document
  +       * for parsing.
  +       *
  +       * @param location A string representing the location of the external schema 
document
  +       */
  +     virtual void
  +     setExternalNoNamespaceSchemaLocation(const XalanDOMChar*        location);
  +
        /** 
         * Map a pointer to a XalanDocument instance to its implementation
         * class pointer.  Normally, you should have no reason for doing
  @@ -335,12 +372,6 @@
        XalanSourceTreeDocument*
        createXalanSourceTreeDocument();
   
  -     bool
  -     setPersistent(XalanSourceTreeDocument*  theDocument);
  -
  -     bool
  -     unsetPersistent(XalanSourceTreeDocument*        theDocument);
  -
   #if defined(XALAN_NO_NAMESPACES)
        typedef map<const XalanDocument*,
                                XalanSourceTreeDocument*,
  @@ -350,6 +381,11 @@
                                         XalanSourceTreeDocument*>      
DocumentMapType;
   #endif
   
  +protected:
  +
  +     virtual SAX2XMLReader*
  +     createReader();
  +
   private:
   
        // Not implemented...
  @@ -364,19 +400,21 @@
   
        DocumentMapType                         m_documentMap;
   
  -     DocumentMapType                         m_persistentDocumentMap;
  -
        bool                                            m_poolAllText;
   
  -     static const XalanDOMChar       validationString[];
  +     static const XalanDOMChar       s_validationString[];
  +
  +     static const XalanDOMChar       s_dynamicValidationString[];
  +
  +     static const XalanDOMChar       s_namespacesString[];
   
  -     static const XalanDOMChar       dynamicValidationString[];
  +     static const XalanDOMChar       s_namespacePrefixesString[];
   
  -     static const XalanDOMChar       namespacesString[];
  +     static const XalanDOMChar       s_schemaString[];
   
  -     static const XalanDOMChar       namespacePrefixesString[];
  +     static const XalanDOMChar       s_externalSchemaLocationString[];
   
  -     static const XalanDOMChar       schemaString[];
  +     static const XalanDOMChar       s_externalNoNamespaceSchemaLocationString[];
   };
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to