dbertoni    2002/11/11 18:32:30

  Modified:    c/src/XSLT ElemElement.cpp ElemElement.hpp
                        ElemLiteralResult.cpp ElemLiteralResult.hpp
                        ElemTemplateElement.cpp ElemTemplateElement.hpp
                        NamespacesHandler.cpp NamespacesHandler.hpp
                        StylesheetHandler.cpp StylesheetHandler.hpp
  Log:
  Reduce size of NamespacesHandler and ElemTempalteElement.
  
  Revision  Changes    Path
  1.43      +16 -1     xml-xalan/c/src/XSLT/ElemElement.cpp
  
  Index: ElemElement.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemElement.cpp,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- ElemElement.cpp   31 Oct 2002 07:15:56 -0000      1.42
  +++ ElemElement.cpp   12 Nov 2002 02:32:29 -0000      1.43
  @@ -90,7 +90,7 @@
   {
        // Namespace aliases are not used for xsl:element, so
        // turn them off...
  -     m_namespacesHandler.setProcessNamespaceAliaises(false);
  +//   m_namespacesHandler.setProcessNamespaceAliaises(false);
   
        const unsigned int      nAttrs = atts.getLength();
   
  @@ -344,6 +344,21 @@
                        executionContext.endElement(c_wstr(elemName));
                }
        }
  +}
  +
  +
  +
  +void
  +ElemElement::postConstruction(
  +                     StylesheetConstructionContext&  constructionContext,
  +                     const NamespacesHandler&                
theParentHandler,
  +                     NamespacesHandler&                              
theHandler)
  +{
  +     theHandler.postConstruction(
  +                     constructionContext,
  +                     false,
  +                     getElementName(),
  +                     &theParentHandler);
   }
   
   
  
  
  
  1.14      +7 -1      xml-xalan/c/src/XSLT/ElemElement.hpp
  
  Index: ElemElement.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemElement.hpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ElemElement.hpp   14 May 2001 22:21:08 -0000      1.13
  +++ ElemElement.hpp   12 Nov 2002 02:32:29 -0000      1.14
  @@ -124,6 +124,12 @@
                        StylesheetExecutionContext&             
executionContext,
                        bool                                                    
skipAttributeChildren) const;
   
  +     virtual void
  +     postConstruction(
  +                     StylesheetConstructionContext&  constructionContext,
  +                     const NamespacesHandler&                
theParentHandler,
  +                     NamespacesHandler&                              
theHandler);
  +
   private:
   
        /** 
  
  
  
  1.58      +67 -17    xml-xalan/c/src/XSLT/ElemLiteralResult.cpp
  
  Index: ElemLiteralResult.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemLiteralResult.cpp,v
  retrieving revision 1.57
  retrieving revision 1.58
  diff -u -r1.57 -r1.58
  --- ElemLiteralResult.cpp     6 Nov 2002 05:09:48 -0000       1.57
  +++ ElemLiteralResult.cpp     12 Nov 2002 02:32:29 -0000      1.58
  @@ -221,34 +221,66 @@
   
   
   
  -void
  -ElemLiteralResult::postConstruction(
  -                     StylesheetConstructionContext&  constructionContext,
  -                     const NamespacesHandler&                
theParentHandler)
  +class AVTPrefixChecker : public NamespacesHandler::PrefixChecker
   {
  -     // OK, now check all attribute AVTs to make sure
  -     // our NamespacesHandler knows about any prefixes
  -     // that will need namespace declarations...
  -     const StylesheetConstructionContext::GetAndReleaseCachedString  
theGuard(constructionContext);
  +public:
   
  -     XalanDOMString&         thePrefix = theGuard.get();
  +     AVTPrefixChecker(
  +                     const AVT**                     theAVTs,
  +                     unsigned int            theAVTsCount) :
  +             m_avts(theAVTs),
  +             m_avtsCount(theAVTsCount)
  +     {
  +     }
   
  -     for(unsigned int i = 0; i < m_avtsCount; ++i)
  +     virtual bool
  +     isActive(const XalanDOMString&  thePrefix) const
        {
  -             const AVT* const        avt = m_avts[i];
  +             bool    fActive = false;
   
  -             const XalanDOMString&   theName = avt->getName();
  +             for(unsigned int i = 0; i < m_avtsCount; ++i)
  +             {
  +                     const AVT* const        avt = m_avts[i];
   
  -             const XalanDOMString::size_type         theColonIndex = 
indexOf(theName, XalanUnicode::charColon);
  +                     const XalanDOMString&   theName = avt->getName();
   
  -             if (theColonIndex != length(theName))
  -             {
  -                     theName.substr(thePrefix, 0, theColonIndex);
  +                     const XalanDOMString::size_type         theColonIndex = 
indexOf(theName, XalanUnicode::charColon);
   
  -                     
m_namespacesHandler.addActivePrefix(constructionContext, thePrefix);
  +                     if (theColonIndex != length(theName))
  +                     {
  +                             if (thePrefix.length() == theColonIndex &&
  +                                     startsWith(theName, thePrefix) == true)
  +                             {
  +                                     fActive = true;
  +
  +                                     break;
  +                             }
  +                     }
                }
  +
  +             return fActive;
        }
   
  +private:
  +
  +     // Not implemented...
  +     AVTPrefixChecker&
  +     operator=(const AVTPrefixChecker&);
  +
  +
  +     // Data members...
  +     const AVT** const       m_avts;
  +
  +     const unsigned int      m_avtsCount;
  +};
  +
  +
  +
  +void
  +ElemLiteralResult::postConstruction(
  +                     StylesheetConstructionContext&  constructionContext,
  +                     const NamespacesHandler&                
theParentHandler)
  +{
        if (m_avtsCount != 0 ||
                m_namespacesHandler.getNamespaceDeclarationsCount() != 0)
        {
  @@ -283,6 +315,24 @@
                        }
                }
        }
  +}
  +
  +
  +
  +void
  +ElemLiteralResult::postConstruction(
  +                     StylesheetConstructionContext&  constructionContext,
  +                     const NamespacesHandler&                
theParentHandler,
  +                     NamespacesHandler&                              
theHandler)
  +{
  +     const AVTPrefixChecker  theChecker(m_avts, m_avtsCount);
  +
  +     theHandler.postConstruction(
  +                     constructionContext,
  +                     true,
  +                     getElementName(),
  +                     &theParentHandler,
  +                     &theChecker);
   }
   
   
  
  
  
  1.31      +6 -0      xml-xalan/c/src/XSLT/ElemLiteralResult.hpp
  
  Index: ElemLiteralResult.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemLiteralResult.hpp,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- ElemLiteralResult.hpp     6 Nov 2002 05:09:48 -0000       1.30
  +++ ElemLiteralResult.hpp     12 Nov 2002 02:32:29 -0000      1.31
  @@ -155,6 +155,12 @@
                        int                                                     
        columnNumber,
                        int                                                     
        xslToken);
   
  +     virtual void
  +     postConstruction(
  +                     StylesheetConstructionContext&  constructionContext,
  +                     const NamespacesHandler&                
theParentHandler,
  +                     NamespacesHandler&                              
theHandler);
  +
   private:
   
        // not implemented
  
  
  
  1.85      +18 -5     xml-xalan/c/src/XSLT/ElemTemplateElement.cpp
  
  Index: ElemTemplateElement.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemTemplateElement.cpp,v
  retrieving revision 1.84
  retrieving revision 1.85
  diff -u -r1.84 -r1.85
  --- ElemTemplateElement.cpp   6 Nov 2002 05:09:48 -0000       1.84
  +++ ElemTemplateElement.cpp   12 Nov 2002 02:32:29 -0000      1.85
  @@ -1074,10 +1074,10 @@
                        StylesheetConstructionContext&  constructionContext,
                        const NamespacesHandler&                
theParentHandler)
   {
  -     m_namespacesHandler.postConstruction(
  +     postConstruction(
                        constructionContext,
  -                     getElementName(),
  -                     &theParentHandler);
  +                     theParentHandler,
  +                     m_namespacesHandler);
   
        if (hasChildren() == true)
        {
  @@ -1130,8 +1130,6 @@
   #endif
   
                                m_directTemplate = 
theCallTemplateChild->getTemplate();
  -
  -//                           delete theCallTemplateChild;
                        }
                }
                else if (canGenerateAttributes() == false &&
  @@ -1140,6 +1138,21 @@
                        m_flags |= eCanGenerateAttributes;
                }
        }
  +}
  +
  +
  +
  +void
  +ElemTemplateElement::postConstruction(
  +                     StylesheetConstructionContext&  constructionContext,
  +                     const NamespacesHandler&                
theParentHandler,
  +                     NamespacesHandler&                              
theHandler)
  +{
  +     theHandler.postConstruction(
  +                     constructionContext,
  +                     true,
  +                     getElementName(),
  +                     &theParentHandler);
   }
   
   
  
  
  
  1.52      +12 -0     xml-xalan/c/src/XSLT/ElemTemplateElement.hpp
  
  Index: ElemTemplateElement.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemTemplateElement.hpp,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- ElemTemplateElement.hpp   6 Nov 2002 05:09:48 -0000       1.51
  +++ ElemTemplateElement.hpp   12 Nov 2002 02:32:29 -0000      1.52
  @@ -877,6 +877,18 @@
        virtual bool
        childTypeAllowed(int    xslToken) const;
   
  +     /**
  +      * Called after construction is completed.  This is a hook for
  +      * deriving classes to handle post-constructio with the
  +      * instances HamespaceHandler instance, which is otherwise only
  +      * available through a const accessor.
  +      */
  +     virtual void
  +     postConstruction(
  +                     StylesheetConstructionContext&  constructionContext,
  +                     const NamespacesHandler&                
theParentHandler,
  +                     NamespacesHandler&                              
theHandler);
  +
        /*
         * This object handles all result tree namespace processing.
         */
  
  
  
  1.24      +57 -54    xml-xalan/c/src/XSLT/NamespacesHandler.cpp
  
  Index: NamespacesHandler.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/NamespacesHandler.cpp,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- NamespacesHandler.cpp     26 Sep 2002 05:14:14 -0000      1.23
  +++ NamespacesHandler.cpp     12 Nov 2002 02:32:29 -0000      1.24
  @@ -72,13 +72,26 @@
   
   
   
  +#include "AVT.hpp"
   #include "Constants.hpp"
   #include "StylesheetConstructionContext.hpp"
   #include "StylesheetExecutionContext.hpp"
   
   
   
  -const XalanDOMString         
NamespacesHandler::NamespaceExtended::s_emptyString;
  +const XalanDOMString         NamespacesHandler::Namespace::s_emptyString;
  +
  +
  +
  +NamespacesHandler::PrefixChecker::PrefixChecker()
  +{
  +}
  +
  +
  +
  +NamespacesHandler::PrefixChecker::~PrefixChecker()
  +{
  +}
   
   
   
  @@ -86,9 +99,7 @@
        m_excludedResultPrefixes(),
        m_namespaceDeclarations(),
        m_extensionNamespaceURIs(),
  -     m_namespaceAliases(),
  -     m_activePrefixes(),
  -     m_processAliases(true)
  +     m_namespaceAliases()
   {
   }
   
  @@ -102,9 +113,7 @@
        m_excludedResultPrefixes(),
        m_namespaceDeclarations(),
        m_extensionNamespaceURIs(),
  -     m_namespaceAliases(),
  -     m_activePrefixes(),
  -     m_processAliases(true)
  +     m_namespaceAliases()
   {
        // Go through the namespaces stack in reverse order...
        const NamespacesStackType::const_reverse_iterator       theEnd =
  @@ -139,7 +148,7 @@
                                        m_namespaceDeclarations.insert(
                                                NamespacesMapType::value_type(
                                                        
&theConstructionContext.getPooledString(thePrefix),
  -                                                     NamespaceExtended(
  +                                                     Namespace(
                                                                
theConstructionContext.getPooledString(theNamespace.getPrefix()),
                                                                
theConstructionContext.getPooledString(theNamespace.getURI()))));
                                }
  @@ -166,7 +175,7 @@
   void
   NamespacesHandler::addExtensionNamespaceURI(
                        StylesheetConstructionContext&  theConstructionContext,
  -                     const XalanDOMString&   theURI)
  +                     const XalanDOMString&                   theURI)
   {
        
m_extensionNamespaceURIs.push_back(&theConstructionContext.getPooledString(theURI));
   }
  @@ -249,27 +258,20 @@
   
   
   void
  -NamespacesHandler::addActivePrefix(
  -                     StylesheetConstructionContext&  theConstructionContext,
  -                     const XalanDOMString&                   thePrefix)
  -{
  -     m_activePrefixes.push_back(
  -             &theConstructionContext.getPooledString(thePrefix));
  -}
  -
  -
  -
  -void
   NamespacesHandler::processExcludeResultPrefixes(
                StylesheetConstructionContext&  theConstructionContext,
                const XalanDOMChar*                             theValue,
                const NamespacesStackType&              theCurrentNamespaces)
   {
  +     typedef StylesheetConstructionContext::GetAndReleaseCachedString        
GetAndReleaseCachedString;
  +
        StringTokenizer         tokenizer(
                                        theValue,
                                        
Constants::DEFAULT_WHITESPACE_SEPARATOR_STRING);
   
  -     XalanDOMString  thePrefix;
  +     const GetAndReleaseCachedString         
theGuard(theConstructionContext);
  +
  +     XalanDOMString&         thePrefix = theGuard.get();
   
       while(tokenizer.hasMoreTokens() == true)
       {
  @@ -285,11 +287,7 @@
   
                if(theNamespace == 0)
                {
  -                     XalanDOMString  
theMessage(TranscodeFromLocalCodePage("Invalid prefix in 
exclude-result-prefixes: "));
  -
  -                     theMessage += thePrefix;
  -
  -                     theConstructionContext.error(theMessage);
  +                     theConstructionContext.error("Undeclared prefix in 
exclude-result-prefixes");
                }
   
                
m_excludedResultPrefixes[&theConstructionContext.getPooledString(thePrefix)] =
  @@ -305,13 +303,19 @@
                        const XalanDOMChar*                             
theValue,
                        const NamespacesStackType&              
theCurrentNamespaces)
   {
  +     typedef StylesheetConstructionContext::GetAndReleaseCachedString        
GetAndReleaseCachedString;
  +
        StringTokenizer         tokenizer(
                                        theValue,
                                        
Constants::DEFAULT_WHITESPACE_SEPARATOR_STRING);
   
  -    while(tokenizer.hasMoreTokens() == true)
  +     const GetAndReleaseCachedString         
theGuard(theConstructionContext);
  +
  +     XalanDOMString&         thePrefix = theGuard.get();
  +
  +     while(tokenizer.hasMoreTokens() == true)
       {
  -             XalanDOMString  thePrefix = tokenizer.nextToken();
  +             tokenizer.nextToken(thePrefix);
   
                if(equalsIgnoreCaseASCII(thePrefix, 
Constants::ATTRVAL_DEFAULT_PREFIX) == true)
                {
  @@ -323,11 +327,7 @@
   
                if(theNamespace == 0)
                {
  -                     XalanDOMString  
theMessage(TranscodeFromLocalCodePage("Invalid prefix in 
extension-element-prefixes: "));
  -
  -                     theMessage += thePrefix;
  -
  -                     theConstructionContext.error(theMessage);
  +                     theConstructionContext.error("Undeclared prefix in 
extension-element-prefixes");
                }
   
                assert(theNamespace != 0);
  @@ -341,8 +341,10 @@
   void
   NamespacesHandler::postConstruction(
                        StylesheetConstructionContext&  theConstructionContext,
  +                     bool                                                    
fProcessNamespaceAliases,
                        const XalanDOMString&                   theElementName,
  -                     const NamespacesHandler*                
parentNamespacesHandler)
  +                     const NamespacesHandler*                
parentNamespacesHandler,
  +                     const PrefixChecker*                    prefixChecker)
   {
        // Copy everything from the parent handler, if there is one...
        if (parentNamespacesHandler != 0)
  @@ -358,22 +360,26 @@
        // don't exclude its prefix.
        const XalanDOMString::size_type         indexOfNSSep = 
indexOf(theElementName, XalanUnicode::charColon);
   
  -     XalanDOMString  thePrefix;
  -     
  +     typedef StylesheetConstructionContext::GetAndReleaseCachedString        
GetAndReleaseCachedString;
  +
  +     const GetAndReleaseCachedString         
theGuard(theConstructionContext);
  +
  +     XalanDOMString&         thePrefix = theGuard.get();
  +
        if (indexOfNSSep < length(theElementName))
        {
                substring(theElementName, thePrefix, 0, indexOfNSSep);
        }
   
  -     processExcludeResultPrefixes(theConstructionContext, thePrefix);
  +     processExcludeResultPrefixes(theConstructionContext, thePrefix, 
prefixChecker);
   
  -     // $$ ToDo: Does this happen before or after exclude-result-prefixes?
  -     processNamespaceAliases();
  +     if (fProcessNamespaceAliases == true)
  +     {
  +             // $$ ToDo: Does this happen before or after 
exclude-result-prefixes?
  +             processNamespaceAliases();
  +     }
   
        createResultAttributeNames(theConstructionContext);
  -
  -     // We don't need these any more...
  -     m_activePrefixes.clear();
   }
   
   
  @@ -438,9 +444,9 @@
   
                for(; i != theEnd; ++i)
                {
  -                     const NamespaceExtended&        theNamespace = 
(*i).second;
  +                     const Namespace&                theNamespace = 
(*i).second;
   
  -                     const XalanDOMString&           thePrefix = 
theNamespace.getPrefix();
  +                     const XalanDOMString&   thePrefix = 
theNamespace.getPrefix();
   
                        // If we're not supposed to suppress the default 
namespace, or
                        // there's a prefix (so it's not the default), we can 
continue
  @@ -554,8 +560,6 @@
        m_extensionNamespaceURIs.clear();
   
        m_namespaceAliases.clear();
  -
  -     m_activePrefixes.clear();
   }
   
   
  @@ -570,8 +574,6 @@
        m_extensionNamespaceURIs.swap(theOther.m_extensionNamespaceURIs);
   
        m_namespaceAliases.swap(theOther.m_namespaceAliases);
  -
  -     m_activePrefixes.swap(theOther.m_activePrefixes);
   }
   
   
  @@ -594,7 +596,7 @@
   
                for(; i != theEnd; ++i)
                {
  -                     NamespaceExtended&              theNamespace = 
(*i).second;
  +                     Namespace&                              theNamespace = 
(*i).second;
   
                        const XalanDOMString&   thePrefix = 
theNamespace.getPrefix();
   
  @@ -624,7 +626,8 @@
   void
   NamespacesHandler::processExcludeResultPrefixes(
                        StylesheetConstructionContext&  theConstructionContext,
  -                     const XalanDOMString&                   
theElementPrefix)
  +                     const XalanDOMString&                   
theElementPrefix,
  +                     const PrefixChecker*                    prefixChecker)
   {
        if (m_excludedResultPrefixes.empty() == false)
        {
  @@ -648,7 +651,7 @@
                // Check for any result prefixes we should exclude...
                while(i != theEnd)
                {
  -                     const NamespaceExtended&        theNamespace = 
(*i).second;
  +                     const Namespace&                theNamespace = 
(*i).second;
   
                        const XalanDOMString&   thePrefix = 
theNamespace.getPrefix();
                        const XalanDOMString&   theURI = theNamespace.getURI();
  @@ -656,7 +659,7 @@
                        // We can never exclude the prefix of our owner 
element, so
                        // check that first...
                        if (equals(thePrefix, theElementPrefix) == false &&
  -                             isActivePrefix(thePrefix) == false &&
  +                             (prefixChecker == 0 || 
prefixChecker->isActive(thePrefix) == false) &&
                                (isExcludedNamespaceURI(theURI) == true ||
                                 isExtensionNamespaceURI(theURI) == true))
                        {
  @@ -687,7 +690,7 @@
   void
   NamespacesHandler::processNamespaceAliases()
   {
  -     if (m_processAliases == true && m_namespaceDeclarations.empty() == 
false)
  +     if (m_namespaceDeclarations.empty() == false)
        {
                const NamespacesMapType::iterator       theEnd =
                                m_namespaceDeclarations.end();
  @@ -699,7 +702,7 @@
                // alias as appropriate...
                for(; i != theEnd; ++i)
                {
  -                     NamespaceExtended&      theNamespace = (*i).second;
  +                     Namespace&      theNamespace = (*i).second;
   
                        const XalanDOMString&                   theURI =
                                                theNamespace.getURI();
  
  
  
  1.15      +27 -47    xml-xalan/c/src/XSLT/NamespacesHandler.hpp
  
  Index: NamespacesHandler.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/NamespacesHandler.hpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- NamespacesHandler.hpp     26 Sep 2002 05:14:14 -0000      1.14
  +++ NamespacesHandler.hpp     12 Nov 2002 02:32:29 -0000      1.15
  @@ -92,18 +92,31 @@
   {
   public:
   
  -     class NamespaceExtended
  +     class PrefixChecker
        {
        public:
   
  -             NamespaceExtended() :
  +             PrefixChecker();
  +
  +             virtual
  +             ~PrefixChecker();
  +
  +             virtual bool
  +             isActive(const XalanDOMString&  thePrefix) const = 0;
  +     };
  +
  +     class Namespace
  +     {
  +     public:
  +
  +             Namespace() :
                        m_prefix(&s_emptyString),
                        m_uri(&s_emptyString),
                        m_resultAttributeName(&s_emptyString)
                {
                }
   
  -             NamespaceExtended(
  +             Namespace(
                                        const XalanDOMString&   prefix,
                                        const XalanDOMString&   uri) :
                        m_prefix(&prefix),
  @@ -204,7 +217,7 @@
                                DOMStringPointerLessThanFunction>               
ExcludedResultPrefixesMapType;
   
        typedef map<const XalanDOMString*,
  -                             NamespaceExtended,
  +                             Namespace,
                                DOMStringPointerLessThanFunction>               
NamespacesMapType;
   
        typedef map<const XalanDOMString*,
  @@ -218,7 +231,7 @@
                                         DOMStringPointerLessThanFunction>      
ExcludedResultPrefixesMapType;
   
        typedef std::map<const XalanDOMString*,
  -                                      NamespaceExtended,
  +                                      Namespace,
                                         DOMStringPointerLessThanFunction>      
NamespacesMapType;
   
        typedef std::map<const XalanDOMString*,
  @@ -281,14 +294,18 @@
         * Notify the instance that the stylesheet is fully constructed.
         *
         * @param theConstructionContext The current construction context.
  +      * @param fProcessNamespaceAliases If true, process any namespace 
aliases
         * @param theElementName The name of the owning element.
         * @param parentNamespacesHandler The parent handler, if any.
  +      * @param prefixChecker A pointer to a PrefixChecker instance to use, 
if any.
         */
        void
        postConstruction(
                        StylesheetConstructionContext&  theConstructionContext,
  +                     bool                                                    
fProcessNamespaceAliases = true,
                        const XalanDOMString&                   theElementName 
= XalanDOMString(),
  -                     const NamespacesHandler*                
parentNamespacesHandler = 0);
  +                     const NamespacesHandler*                
parentNamespacesHandler = 0,
  +                     const PrefixChecker*                    prefixChecker = 
0);
   
        NamespacesHandler&
        operator=(const NamespacesHandler&      theRHS);
  @@ -348,17 +365,6 @@
                        const XalanDOMString&                   
theResultNamespace);
   
        /**
  -      * Add a prefix to the list of active prefixes.
  -      *
  -      * @param theConstructionContext The current construction context.
  -      * @param thePrefix The prefix that is active and requires a namespace 
declaration.
  -      */
  -     void
  -     addActivePrefix(
  -                     StylesheetConstructionContext&  theConstructionContext,
  -                     const XalanDOMString&                   thePrefix);
  -
  -     /**
         * Copy the aliases from the given NamespacesHandler.
         *
         * @param parentNamespacesHandler The parent handler.
  @@ -391,18 +397,6 @@
        void
        swap(NamespacesHandler&         theOther);
   
  -     bool
  -     getProcessNamespaceAliaises() const
  -     {
  -             return m_processAliases;
  -     }
  -
  -     void
  -     setProcessNamespaceAliaises(bool        fValue)
  -     {
  -             m_processAliases = fValue;
  -     }
  -
        NamespacesMapType::size_type
        getNamespaceDeclarationsCount() const
        {
  @@ -424,11 +418,13 @@
         *
         * @param theConstructionContext The current construction context.
         * @param theElementPrefix The prefix of the owning element.
  +      * @param prefixChecker A pointer to a PrefixChecker instance to use, 
if any.
         */
        void
        processExcludeResultPrefixes(
                        StylesheetConstructionContext&  theConstructionContext,
  -                     const XalanDOMString&                   
theElementPrefix);
  +                     const XalanDOMString&                   
theElementPrefix,
  +                     const PrefixChecker*                    prefixChecker);
   
        /**
         * Process the namespace aliases data.
  @@ -498,18 +494,6 @@
        }
   
        /**
  -      * Determine if a given prefix is active.
  -      *
  -      * @param thePrefix The prefix to check.
  -      * @return true if the prefix is active, false if not.
  -      */
  -     bool
  -     isActivePrefix(const XalanDOMString&    thePrefix) const
  -     {
  -             return findString(thePrefix, m_activePrefixes);
  -     }
  -
  -     /**
         * Determine if a given string is present in the vector
         *
         * @param theString The string to find.
  @@ -520,6 +504,7 @@
                        const XalanDOMString&                                   
theString,
                        const XalanDOMStringPointerVectorType&  theVector);
   
  +
        // Not implemented...
        bool
        operator==(const NamespacesHandler&) const;
  @@ -532,11 +517,6 @@
        XalanDOMStringPointerVectorType         m_extensionNamespaceURIs;
   
        NamespaceAliasesMapType                         m_namespaceAliases;
  -
  -     XalanDOMStringPointerVectorType         m_activePrefixes;
  -
  -     // If true namespace aliases will be processed.  If false, they will 
not.
  -     bool                                                            
m_processAliases;
   };
   
   
  
  
  
  1.97      +29 -36    xml-xalan/c/src/XSLT/StylesheetHandler.cpp
  
  Index: StylesheetHandler.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.cpp,v
  retrieving revision 1.96
  retrieving revision 1.97
  diff -u -r1.96 -r1.97
  --- StylesheetHandler.cpp     6 Nov 2002 05:09:48 -0000       1.96
  +++ StylesheetHandler.cpp     12 Nov 2002 02:32:29 -0000      1.97
  @@ -295,15 +295,23 @@
                // First push namespaces
                m_stylesheet.pushNamespaces(atts);
   
  -             const XalanDOMString&   ns = getNamespaceFromStack(name);
  -
                const XalanDOMString::size_type         nameLength = 
length(name);
                const XalanDOMString::size_type         index = indexOf(name, 
XalanUnicode::charColon);
   
  -             if(length(ns) == 0 && index < nameLength)
  +             const XalanDOMString*   ns = getNamespaceFromStack(name);
  +
  +             if(ns == 0)
                {
  -                     error("Could not resolve prefix.", locator);
  +                     if (index < nameLength)
  +                     {
  +                             error("Could not resolve prefix", locator);
  +                     }
  +                     else
  +                     {
  +                             ns = &s_emptyString;
  +                     }
                }
  +             assert(ns != 0);
   
                if (index < nameLength)
                {
  @@ -318,10 +326,10 @@
   
                const ElemTemplateStackType::size_type  origStackSize = 
m_elemStack.size();
   
  -             if(equals(ns, m_constructionContext.getXSLTNamespaceURI()))
  +             if(equals(*ns, m_constructionContext.getXSLTNamespaceURI()))
                {
                        if(!isEmpty(m_stylesheet.getXSLTNamespaceURI()))
  -                             m_stylesheet.setXSLTNamespaceURI(ns);
  +                             m_stylesheet.setXSLTNamespaceURI(*ns);
   
                        const StylesheetConstructionContext::eElementToken      
xslToken =
                                
m_constructionContext.getElementToken(m_elementLocalName);
  @@ -530,7 +538,7 @@
                                
m_inScopeVariableNamesStack.push_back(QNameSetVectorType::value_type());
                        }
                }
  -             else if (!m_inTemplate && startsWith(ns, 
m_constructionContext.getXalanXSLNameSpaceURL()))
  +             else if (!m_inTemplate && startsWith(*ns, 
m_constructionContext.getXalanXSLNameSpaceURL()))
                {
                        processExtensionElement(name, m_elementLocalName, atts, 
locator);
                }
  @@ -543,7 +551,7 @@
                                {
                                        elem = initWrapperless(name, atts, 
locator);
                                }
  -                             else if (length(ns) == 0 && m_elemStack.size() 
== 1)
  +                             else if (length(*ns) == 0 && m_elemStack.size() 
== 1)
                                {
                                        error("Illegal top level element", 
locator);
                                }
  @@ -560,8 +568,8 @@
                                // is this an extension element call?
                                ExtensionNSHandler*             nsh = 0;
   
  -                             if (!isEmpty(ns) &&
  -                                     ((nsh = 
m_stylesheet.lookupExtensionNSHandler(ns)) != 0))
  +                             if (!isEmpty(*ns) &&
  +                                     ((nsh = 
m_stylesheet.lookupExtensionNSHandler(*ns)) != 0))
                                {
                                        elem = 
m_constructionContext.createElement(
                                                                                
                m_stylesheet,
  @@ -669,38 +677,18 @@
   
   
   
  -const XalanDOMString&
  +const XalanDOMString*
   StylesheetHandler::getNamespaceFromStack(const XalanDOMChar* theName) const
   {
  -     const XalanDOMString* const             theNamespace =
  -             m_stylesheet.getNamespaceFromStack(theName);
  -
  -     if (theNamespace == 0)
  -     {
  -             return s_emptyString;
  -     }
  -     else
  -     {
  -             return *theNamespace;
  -     }
  +     return m_stylesheet.getNamespaceFromStack(theName);
   }
   
   
   
  -const XalanDOMString&
  +const XalanDOMString*
   StylesheetHandler::getNamespaceForPrefixFromStack(const XalanDOMString&      
        thePrefix) const
   {
  -     const XalanDOMString* const             theNamespace =
  -             m_stylesheet.getNamespaceForPrefixFromStack(thePrefix);
  -
  -     if (theNamespace == 0)
  -     {
  -             return s_emptyString;
  -     }
  -     else
  -     {
  -             return *theNamespace;
  -     }
  +     return m_stylesheet.getNamespaceForPrefixFromStack(thePrefix);
   }
   
   
  @@ -882,9 +870,14 @@
                        {
                                tokenizer.nextToken(prefix);
   
  -                             const XalanDOMString&   extns = 
getNamespaceForPrefixFromStack(prefix);
  +                             const XalanDOMString* const             extns = 
getNamespaceForPrefixFromStack(prefix);
  +
  +                             if (extns == 0)
  +                             {
  +                                     error("Undeclared prefix in 
extension-element-prefixes", locator);
  +                             }
   
  -                             
m_stylesheet.processExtensionNamespace(m_constructionContext, extns);
  +                             
m_stylesheet.processExtensionNamespace(m_constructionContext, *extns);
                        }
                }
                else if(equals(aname, Constants::ATTRNAME_ID))
  
  
  
  1.41      +2 -2      xml-xalan/c/src/XSLT/StylesheetHandler.hpp
  
  Index: StylesheetHandler.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.hpp,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- StylesheetHandler.hpp     5 Nov 2002 05:19:25 -0000       1.40
  +++ StylesheetHandler.hpp     12 Nov 2002 02:32:29 -0000      1.41
  @@ -758,10 +758,10 @@
                        const AttributeList&    atts,
                        const Locator*                  locator);
   
  -     const XalanDOMString&
  +     const XalanDOMString*
        getNamespaceFromStack(const XalanDOMChar*       theName) const;
   
  -     const XalanDOMString&
  +     const XalanDOMString*
        getNamespaceForPrefixFromStack(const XalanDOMString&    thePrefix) 
const;
   
        class PushPopIncludeState;
  
  
  

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

Reply via email to