dbertoni    01/03/02 11:08:54

  Modified:    c/src/XalanSourceTree FormatterToSourceTree.cpp
                        FormatterToSourceTree.hpp
                        XalanSourceTreeDocument.cpp
                        XalanSourceTreeDocument.hpp
  Log:
  Added PrefixResolver support.
  
  Revision  Changes    Path
  1.4       +27 -3     xml-xalan/c/src/XalanSourceTree/FormatterToSourceTree.cpp
  
  Index: FormatterToSourceTree.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/FormatterToSourceTree.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FormatterToSourceTree.cpp 2001/02/08 21:16:10     1.3
  +++ FormatterToSourceTree.cpp 2001/03/02 19:08:30     1.4
  @@ -76,6 +76,10 @@
   
   
   
  +#include <DOMSupport/PrefixResolver.hpp>
  +
  +
  +
   #include <XMLSupport/FormatterToDOM.hpp>
   
   
  @@ -94,7 +98,8 @@
        m_documentFragment(0),
        m_currentElement(0),
        m_elementStack(),
  -     m_textBuffer()
  +     m_textBuffer(),
  +     m_prefixResolver(0)
   {
        assert(m_document != 0);
   }
  @@ -109,7 +114,8 @@
        m_documentFragment(theDocumentFragment),
        m_currentElement(0),
        m_elementStack(),
  -     m_textBuffer()
  +     m_textBuffer(),
  +     m_prefixResolver(0)
   {
        assert(m_document != 0);
        assert(m_documentFragment != 0);
  @@ -153,7 +159,7 @@
                        AttributeList&                  attrs)
   {
        XalanSourceTreeElement* const   theNewElement =
  -             m_document->createElementNode(name, attrs, m_currentElement);
  +             createElementNode(name, attrs, m_currentElement);
   
        if (m_currentElement != 0)
        {
  @@ -366,6 +372,24 @@
        else
        {
                throw 
XalanDOMException(XalanDOMException::HIERARCHY_REQUEST_ERR);
  +     }
  +}
  +
  +
  +
  +XalanSourceTreeElement*
  +FormatterToSourceTree::createElementNode(
  +                     const XalanDOMChar*                     name,
  +                     AttributeList&                          attrs,
  +                     XalanSourceTreeElement*         theParentElement)
  +{
  +     if (m_prefixResolver != 0)
  +     {
  +             return m_document->createElementNode(name, attrs, 
*m_prefixResolver, theParentElement);
  +     }
  +     else
  +     {
  +             return m_document->createElementNode(name, attrs, 
theParentElement);
        }
   }
   
  
  
  
  1.4       +25 -4     xml-xalan/c/src/XalanSourceTree/FormatterToSourceTree.hpp
  
  Index: FormatterToSourceTree.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/FormatterToSourceTree.hpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FormatterToSourceTree.hpp 2001/02/08 21:16:13     1.3
  +++ FormatterToSourceTree.hpp 2001/03/02 19:08:35     1.4
  @@ -77,6 +77,7 @@
   
   
   
  +class PrefixResolver;
   class XalanDocument;
   class XalanDocumentFragment;
   class XalanElement;
  @@ -130,6 +131,18 @@
        ~FormatterToSourceTree();
   
   
  +     const PrefixResolver*
  +     getPrefixResolver() const
  +     {
  +             return m_prefixResolver;
  +     }
  +
  +     void
  +     setPrefixResolver(const PrefixResolver*         thePrefixResolver)
  +     {
  +             m_prefixResolver = thePrefixResolver;
  +     }
  +
        // These methods are inherited from DocumentHandler ...
   
        virtual void
  @@ -225,15 +238,21 @@
        void
        processAccumulatedText();
   
  +     XalanSourceTreeElement*
  +     createElementNode(
  +                     const XalanDOMChar*                     name,
  +                     AttributeList&                          attrs,
  +                     XalanSourceTreeElement*         theParentElement);
  +
        void
        doCharacters(
  -                     const XMLCh*    chars,
  -                     unsigned int    length);
  +                     const XalanDOMChar*             chars,
  +                     unsigned int                    length);
   
        void
        doProcessingInstruction(
  -                     const XMLCh*    target,
  -                     const XMLCh*    data);
  +                     const XalanDOMChar*             target,
  +                     const XalanDOMChar*             data);
   
   
        // Data members...
  @@ -252,6 +271,8 @@
        ElementStackType                                                        
        m_elementStack;
   
        XalanDOMString                                                          
        m_textBuffer;
  +
  +     const PrefixResolver*                                                   
m_prefixResolver;
   };
   
   
  
  
  
  1.11      +114 -22   
xml-xalan/c/src/XalanSourceTree/XalanSourceTreeDocument.cpp
  
  Index: XalanSourceTreeDocument.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeDocument.cpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XalanSourceTreeDocument.cpp       2001/02/12 19:34:40     1.10
  +++ XalanSourceTreeDocument.cpp       2001/03/02 19:08:38     1.11
  @@ -71,6 +71,10 @@
   
   
   
  +#include <DOMSupport/PrefixResolver.hpp>
  +
  +
  +
   #include "XalanSourceTreeHelper.hpp"
   
   
  @@ -97,7 +101,8 @@
        m_poolAllText(fPoolAllText),
        m_elementsByID(),
        m_unparsedEntityURIs(),
  -     m_nonPooledStrings()
  +     m_nonPooledStrings(),
  +     m_stringBuffer()
   {
   }
   
  @@ -582,6 +587,61 @@
   
   
   
  +XalanSourceTreeElement*
  +XalanSourceTreeDocument::createElementNode(
  +                     const XalanDOMChar*                     tagName,
  +                     const AttributeList&            attrs,
  +                     const PrefixResolver&           thePrefixResolver,
  +                     XalanSourceTreeElement*         theParentElement,
  +                     XalanNode*                                      
thePreviousSibling,
  +                     XalanNode*                                      
theNextSibling)
  +{
  +     // We might have typedef'ed this to something smaller than unsigned int.
  +     const AttributesCountType       theAttributeCount = 
AttributesCountType(attrs.getLength());
  +
  +     // assert that we didn't lose anything...
  +     assert(theAttributeCount == attrs.getLength());
  +
  +     XalanSourceTreeAttr** const             theAttributeVector =
  +             theAttributeCount == 0 ? 0 : 
m_attributesVector.allocate(theAttributeCount);
  +
  +     XalanSourceTreeElement* const   theNewElement =
  +             createElement(
  +                     tagName,
  +                     theAttributeVector,
  +                     theAttributeCount,
  +                     theParentElement,
  +                     thePreviousSibling,
  +                     theNextSibling,
  +                     thePrefixResolver);
  +     assert(theNewElement != 0);
  +
  +     // Now, create the attributes...
  +     for(AttributesCountType i = 0; i < theAttributeCount; ++i)
  +     {
  +             const XalanDOMChar* const       theName =
  +                     attrs.getName(i);
  +             assert(theName != 0);
  +
  +             const XalanDOMChar* const       theValue =
  +                     attrs.getValue(i);
  +             assert(theValue != 0);
  +
  +             theAttributeVector[i] =
  +                     createAttribute(
  +                             theName,
  +                             theValue,
  +                             theNewElement,
  +                             thePrefixResolver);
  +
  +             assert(theAttributeVector[i] != 0);
  +     }
  +
  +     return theNewElement;
  +}
  +
  +
  +
   inline const XalanDOMString&
   getElementNodePrefix(
                        const XalanDOMChar*             qname,
  @@ -759,6 +819,33 @@
   
   
   
  +const XalanDOMString&
  +XalanSourceTreeDocument::getNamespaceForPrefix(
  +                     const XalanDOMChar*             theName,
  +                     const PrefixResolver&   thePrefixResolver,
  +                     XalanDOMString&                 thePrefix)
  +{
  +     const unsigned int      theLength = length(theName);
  +     const unsigned int      theColonIndex = indexOf(theName, 
XalanUnicode::charColon);
  +
  +     if (theColonIndex == theLength)
  +     {
  +             clear(thePrefix);
  +
  +             return thePrefixResolver.getNamespaceForPrefix(s_emptyString);
  +     }
  +     else
  +     {
  +             // Get the prefix from theName...
  +             assign(thePrefix, theName, theColonIndex);
  +             assert(length(thePrefix) != 0);
  +
  +             return thePrefixResolver.getNamespaceForPrefix(thePrefix);
  +     }
  +}
  +
  +
  +
   XalanSourceTreeText*
   XalanSourceTreeDocument::createTextNode(
                        const XalanDOMChar*                     chars,
  @@ -843,19 +930,21 @@
   
   
   
  -#if 0
  -// Commented out for now, since we need a way to get namespace URIs.  (Like 
Stylesheet does).
   XalanSourceTreeAttr*
   XalanSourceTreeDocument::createAttribute(
                        const XalanDOMChar*                     theName,
                        const XalanDOMChar*                     theValue,
  -                     XalanSourceTreeElement*         theOwnerElement)
  +                     XalanSourceTreeElement*         theOwnerElement,
  +                     const PrefixResolver&           thePrefixResolver)
   {
  -     const unsigned int      theLength = length(theName);
  -     const unsigned int      theColonIndex = indexOf(theName, 
XalanUnicode::charColon);
  +     const XalanDOMString&   theNamespace =
  +             getNamespaceForPrefix(theName, thePrefixResolver, 
m_stringBuffer);
   
  -     if (theColonIndex == theLength)
  +     if (length(theNamespace) == 0)
        {
  +             // the prefix was returned by getNamespaceForPrefix()...
  +             assert(length(m_stringBuffer) == 0);
  +
                return m_attributeAllocator.create(
                                m_stringPool.get(theName),
                                m_stringPool.get(theValue),
  @@ -875,10 +964,11 @@
                // index
                //
                return m_attributeNSAllocator.create(
  -                             m_stringPool.get(theName, theLength),
  -                             m_stringPool.get(theName, theColonIndex),
  -                             m_stringPool.get(XalanDOMString()),
  -                             m_stringPool.get(theName + theColonIndex, 
theLength - theColonIndex),
  +                             m_stringPool.get(theName),
  +                             m_stringPool.get(theName + 
length(m_stringBuffer) + 1),
  +                             m_stringPool.get(theNamespace),
  +                             // This is the prefix...
  +                             m_stringPool.get(m_stringBuffer),
                                m_stringPool.get(theValue),
                                theOwnerElement,
                                m_nextIndexValue++);
  @@ -889,7 +979,6 @@
   
   
   
  -// Commented out for now, since we need a way to get namespace URIs.  (Like 
Stylesheet does).
   XalanSourceTreeElement*
   XalanSourceTreeDocument::createElement(
                        const XalanDOMChar*                     theTagName,
  @@ -897,13 +986,17 @@
                        AttributesCountType                     
theAttributeCount,
                        XalanSourceTreeElement*         theParentElement,
                        XalanNode*                                      
thePreviousSibling,
  -                     XalanNode*                                      
theNextSibling)
  +                     XalanNode*                                      
theNextSibling,
  +                     const PrefixResolver&           thePrefixResolver)
   {
  -     const unsigned int      theLength = length(theTagName);
  -     const unsigned int      theColonIndex = indexOf(theTagName, 
XalanUnicode::charColon);
  +     const XalanDOMString&   theNamespace =
  +             getNamespaceForPrefix(theTagName, thePrefixResolver, 
m_stringBuffer);
   
  -     if (theColonIndex == theLength)
  +     if (length(theNamespace) == 0)
        {
  +             // the prefix was returned by getNamespaceForPrefix()...
  +             assert(length(m_stringBuffer) == 0);
  +
                return m_elementAllocator.create(
                                m_stringPool.get(theTagName),
                                this,
  @@ -931,11 +1024,11 @@
                // index
                //
                return m_elementNSAllocator.create(
  -                             m_stringPool.get(theTagName, theLength),
  -                             m_stringPool.get(theTagName + theColonIndex + 
1, theColonIndex),
  -                             // How do we get the namespace for the prefix?
  -                             m_stringPool.get(XalanDOMString()),
  -                             m_stringPool.get(theTagName,),
  +                             m_stringPool.get(theTagName),
  +                             m_stringPool.get(theTagName + 
length(m_stringBuffer) + 1),
  +                             m_stringPool.get(theNamespace),
  +                             // This is the prefix...
  +                             m_stringPool.get(m_stringBuffer),
                                this,
                                theAttributeVector,
                                theAttributeCount,
  @@ -947,7 +1040,6 @@
   
        return 0;
   }
  -#endif
   
   
   
  
  
  
  1.5       +36 -2     
xml-xalan/c/src/XalanSourceTree/XalanSourceTreeDocument.hpp
  
  Index: XalanSourceTreeDocument.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeDocument.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanSourceTreeDocument.hpp       2001/01/08 18:22:37     1.4
  +++ XalanSourceTreeDocument.hpp       2001/03/02 19:08:40     1.5
  @@ -91,6 +91,7 @@
   
   class AttributeList;
   class Attributes;
  +class PrefixResolver;
   
   
   
  @@ -324,6 +325,15 @@
   
        XalanSourceTreeElement*
        createElementNode(
  +                     const XalanDOMChar*                     tagName,
  +                     const AttributeList&            attrs,
  +                     const PrefixResolver&           thePrefixResolver,
  +                     XalanSourceTreeElement*         theParentElement = 0,
  +                     XalanNode*                                      
thePreviousSibling = 0,
  +                     XalanNode*                                      
theNextSibling = 0);
  +
  +     XalanSourceTreeElement*
  +     createElementNode(
                        const XalanDOMChar*                     name,
                        const Attributes&                       attrs,
                        XalanSourceTreeElement*         theParentElement = 0,
  @@ -389,6 +399,13 @@
        createAttribute(
                        const XalanDOMChar*                     theName,
                        const XalanDOMChar*                     theValue,
  +                     XalanSourceTreeElement*         theOwnerElement,
  +                     const PrefixResolver&           thePrefixResolver);
  +
  +     XalanSourceTreeAttr*
  +     createAttribute(
  +                     const XalanDOMChar*                     theName,
  +                     const XalanDOMChar*                     theValue,
                        XalanSourceTreeElement*         theOwnerElement);
   
        XalanSourceTreeElement*
  @@ -400,6 +417,16 @@
                        XalanNode*                                      
thePreviousSibling,
                        XalanNode*                                      
theNextSibling);
   
  +     XalanSourceTreeElement*
  +     createElement(
  +                     const XalanDOMChar*                     theTagName,
  +                     XalanSourceTreeAttr**           theAttributeVector,
  +                     AttributesCountType                     
theAttributeCount,
  +                     XalanSourceTreeElement*         theParentElement,
  +                     XalanNode*                                      
thePreviousSibling,
  +                     XalanNode*                                      
theNextSibling,
  +                     const PrefixResolver&           thePrefixResolver);
  +
        void
        createAttributes(
                        const Attributes&                       theAttributes,
  @@ -409,9 +436,14 @@
   
        const XalanDOMString&
        getTextNodeString(
  -                     const XalanDOMChar*                     chars,
  -                     unsigned int                            length);
  +                     const XalanDOMChar*             chars,
  +                     unsigned int                    length);
   
  +     const XalanDOMString&
  +     getNamespaceForPrefix(
  +                     const XalanDOMChar*             theName,
  +                     const PrefixResolver&   thePrefixResolver,
  +                     XalanDOMString&                 thePrefix);
   
        // Not implemented...
        XalanSourceTreeDocument(const XalanSourceTreeDocument&  theSource);
  @@ -457,6 +489,8 @@
        UnparsedEntityURIMapType                                                
m_unparsedEntityURIs;
   
        StringCollectionType                                                    
m_nonPooledStrings;
  +
  +     XalanDOMString                                                          
        m_stringBuffer;
   
        static const XalanDOMString&                                    
s_nameString;
   };
  
  
  

Reply via email to