dbertoni    00/12/12 08:34:15

  Modified:    c/src/XMLSupport FormatterToHTML.cpp FormatterToHTML.hpp
                        FormatterToXML.cpp FormatterToXML.hpp
  Log:
  Fixed bug where illegal characters were allowed in names.
  
  Revision  Changes    Path
  1.37      +78 -86    xml-xalan/c/src/XMLSupport/FormatterToHTML.cpp
  
  Index: FormatterToHTML.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToHTML.cpp,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- FormatterToHTML.cpp       2000/12/06 21:14:59     1.36
  +++ FormatterToHTML.cpp       2000/12/12 16:34:10     1.37
  @@ -339,30 +339,30 @@
        // specified
        if(isEmptySystem == false || isEmptyPublic == false)
        {
  -             accum(s_doctypeHeaderStartString);
  +             accumContent(s_doctypeHeaderStartString);
   
                if(isEmptyPublic == false)
                {
  -                     accum(s_doctypeHeaderPublicString);
  -                     accum(m_doctypePublic);
  -                     accum(XalanUnicode::charQuoteMark);
  +                     accumContent(s_doctypeHeaderPublicString);
  +                     accumContent(m_doctypePublic);
  +                     accumContent(XalanUnicode::charQuoteMark);
                }
   
                if(isEmptySystem == false)
                {
                        if(isEmptyPublic == true)
                        {
  -                             accum(s_doctypeHeaderSystemString);
  +                             accumContent(s_doctypeHeaderSystemString);
                        }
   
  -                     accum(XalanUnicode::charSpace);
  -                     accum(XalanUnicode::charQuoteMark);
  +                     accumContent(XalanUnicode::charSpace);
  +                     accumContent(XalanUnicode::charQuoteMark);
   
  -                     accum(m_doctypeSystem);
  -                     accum(XalanUnicode::charQuoteMark);
  +                     accumContent(m_doctypeSystem);
  +                     accumContent(XalanUnicode::charQuoteMark);
                }
   
  -             accum(XalanUnicode::charGreaterThanSign);
  +             accumContent(XalanUnicode::charGreaterThanSign);
   
                outputLineSep();
        }
  @@ -415,9 +415,9 @@
   
        m_isRawStack.push_back(elemDesc.is(ElemDesc::RAW));
   
  -     accum(XalanUnicode::charLessThanSign);
  +     accumContent(XalanUnicode::charLessThanSign);
   
  -     writeCharacters(name);
  +     accumName(name);
   
        const unsigned int      nAttrs = attrs.getLength();
   
  @@ -474,25 +474,25 @@
                        indent(m_currentIndent);
                }
   
  -             accum(XalanUnicode::charLessThanSign);
  -             accum(XalanUnicode::charSolidus);
  -             writeCharacters(name);
  -             accum(XalanUnicode::charGreaterThanSign);
  +             accumContent(XalanUnicode::charLessThanSign);
  +             accumContent(XalanUnicode::charSolidus);
  +             accumName(name);
  +             accumContent(XalanUnicode::charGreaterThanSign);
        }
       else
       {
                if(elemDesc.is(ElemDesc::EMPTY) == false)
                {
  -                     accum(XalanUnicode::charGreaterThanSign);
  +                     accumContent(XalanUnicode::charGreaterThanSign);
   
  -                     accum(XalanUnicode::charLessThanSign);
  -                     accum(XalanUnicode::charSolidus);
  -                     writeCharacters(name);
  -                     accum(XalanUnicode::charGreaterThanSign);
  +                     accumContent(XalanUnicode::charLessThanSign);
  +                     accumContent(XalanUnicode::charSolidus);
  +                     accumName(name);
  +                     accumContent(XalanUnicode::charGreaterThanSign);
                }
                else
                {
  -                     accum(XalanUnicode::charGreaterThanSign);
  +                     accumContent(XalanUnicode::charGreaterThanSign);
                }
       }
   
  @@ -566,11 +566,11 @@
   
   
   void
  -FormatterToHTML::entityReference(const XMLCh* const  name)
  +FormatterToHTML::entityReference(const XMLCh* const          name)
   {
  -     accum(XalanUnicode::charAmpersand);
  -     accum(name);
  -     accum(XalanUnicode::charSemicolon);
  +     accumContent(XalanUnicode::charAmpersand);
  +     accumName(name);
  +     accumContent(XalanUnicode::charSemicolon);
   }
   
   
  @@ -604,7 +604,7 @@
                        indent(m_currentIndent);
                }
   
  -             accum(ch, 0, length);
  +             accumContent(ch, 0, length);
        }
        else
        {
  @@ -636,21 +636,21 @@
                        indent(m_currentIndent);
                }
   
  -             accum(XalanUnicode::charLessThanSign);
  -             accum(XalanUnicode::charQuestionMark);
  -             writeCharacters(target);
  +             accumContent(XalanUnicode::charLessThanSign);
  +             accumContent(XalanUnicode::charQuestionMark);
  +             accumName(target);
   
                if (length(data) > 0)
                {
                        if(isXMLWhitespace(data[0]) == false)
                        {
  -                             accum(XalanUnicode::charSpace);
  +                             accumContent(XalanUnicode::charSpace);
                        }
   
  -                     writeCharacters(data);
  +                     accumName(data);
                }
   
  -             accum(XalanUnicode::charGreaterThanSign); // different from XML
  +             accumContent(XalanUnicode::charGreaterThanSign); // different 
from XML
   
                m_startNewLine = true;
        }
  @@ -684,7 +684,7 @@
   
                if(ch < SPECIALSSIZE && m_charsMap[ch] != 'S')
                {
  -                     accum(ch);
  +                     accumContent(ch);
                }
                else if (XalanUnicode::charLF == ch) 
                {
  @@ -758,7 +758,7 @@
                else if(ch >= 0x007Fu && ch <= m_maxCharacter)
                {
                        // Hope this is right...
  -                     accum(ch);
  +                     accumContent(ch);
                }
                else
                {
  @@ -782,13 +782,13 @@
   
                if(ch < SPECIALSSIZE && m_attrCharsMap[ch] != 'S')
                {
  -                     accum(ch);
  +                     accumContent(ch);
                }
                else if(XalanUnicode::charAmpersand == ch &&
                                i + 1 < strLen &&
                                XalanUnicode::charLeftCurlyBracket == string[i 
+ 1])
                {
  -                     accum(ch); // no escaping in this case, as specified in 
15.2
  +                     accumContent(ch); // no escaping in this case, as 
specified in 15.2
                }
                else if (accumDefaultEntity(ch, i, string, strLen, false) == 
false)
                {
  @@ -814,42 +814,42 @@
                                        next = ((ch - 0xd800) << 10) + next 
-0xdc00 + 0x00010000;
                                }
   
  -                             accum(XalanUnicode::charAmpersand);
  -                             accum(XalanUnicode::charNumberSign);
  -                             accum(UnsignedLongToDOMString(next));
  -                             accum(XalanUnicode::charSemicolon);
  +                             accumContent(XalanUnicode::charAmpersand);
  +                             accumContent(XalanUnicode::charNumberSign);
  +                             accumContent(UnsignedLongToDOMString(next));
  +                             accumContent(XalanUnicode::charSemicolon);
                        }
                        else if(ch >= 160 && ch <= 255)
                        {
  -                             accum(XalanUnicode::charAmpersand);
  -                             accum(theHTMLLatin1Symbols[ch - 160]);
  -                             accum(XalanUnicode::charSemicolon);
  +                             accumContent(XalanUnicode::charAmpersand);
  +                             accumContent(theHTMLLatin1Symbols[ch - 160]);
  +                             accumContent(XalanUnicode::charSemicolon);
                        }
                        else if(ch >= 913 && ch <= 937 && ch != 930)
                        {
  -                             accum(XalanUnicode::charAmpersand);
  -                             accum(theHTMLSymbols1[ch - 913]);
  -                             accum(XalanUnicode::charSemicolon);
  +                             accumContent(XalanUnicode::charAmpersand);
  +                             accumContent(theHTMLSymbols1[ch - 913]);
  +                             accumContent(XalanUnicode::charSemicolon);
                        }
                        else if(ch >= 945 && ch <= 969)
                        {
  -                             accum(XalanUnicode::charAmpersand);
  -                             accum(theHTMLSymbols2[ch - 945]);
  -                             accum(XalanUnicode::charSemicolon);
  +                             accumContent(XalanUnicode::charAmpersand);
  +                             accumContent(theHTMLSymbols2[ch - 945]);
  +                             accumContent(XalanUnicode::charSemicolon);
                        }
                        else if(ch >= 977 && ch <= 978)
                        {
  -                             accum(XalanUnicode::charAmpersand);
  -                             // substracting the number of unused characters
  -                             accum(theHTMLSymbols2[ch - 945 - 7]);
  -                             accum(XalanUnicode::charSemicolon);
  +                             accumContent(XalanUnicode::charAmpersand);
  +                             // subtracting the number of unused characters
  +                             accumContent(theHTMLSymbols2[ch - 945 - 7]);
  +                             accumContent(XalanUnicode::charSemicolon);
                        }
                        else if(ch == 982)
                        {
  -                             accum(XalanUnicode::charAmpersand);
  -                             // substracting the number of unused characters
  -                             accum(theHTMLSymbols2[ch - 945 - 10]);
  -                             accum(XalanUnicode::charSemicolon);
  +                             accumContent(XalanUnicode::charAmpersand);
  +                             // subtracting the number of unused characters
  +                             accumContent(theHTMLSymbols2[ch - 945 - 10]);
  +                             accumContent(XalanUnicode::charSemicolon);
                        }
                        else if (338 == ch)
                        {
  @@ -870,26 +870,18 @@
   
   
   void
  -FormatterToHTML::commentData(const XalanDOMChar*             data)
  -{
  -     writeCharacters(data);
  -}
  -
  -
  -
  -void
   FormatterToHTML::copyEntityIntoBuffer(const XalanDOMChar*    s)
   {
        const unsigned int      len = length(s);
   
  -    accum(XalanUnicode::charAmpersand);
  +    accumContent(XalanUnicode::charAmpersand);
   
       for(unsigned int i = 0; i < len; ++i)
       {
  -             accum(s[i]);
  +             accumContent(s[i]);
       }
   
  -    accum(XalanUnicode::charSemicolon);
  +    accumContent(XalanUnicode::charSemicolon);
   }
   
   
  @@ -899,14 +891,14 @@
   {
        const unsigned int      len = length(s);
   
  -    accum(XalanUnicode::charAmpersand);
  +    accumContent(XalanUnicode::charAmpersand);
   
       for(unsigned int i = 0; i < len; ++i)
       {
  -             accum(charAt(s, i));
  +             accumContent(charAt(s, i));
       }
   
  -    accum(XalanUnicode::charSemicolon);
  +    accumContent(XalanUnicode::charSemicolon);
   }
   
   
  @@ -914,14 +906,14 @@
   void
   FormatterToHTML::copyEntityIntoBuffer(const XalanDOMCharVectorType&          
s)
   {
  -    accum(XalanUnicode::charAmpersand);
  +    accumContent(XalanUnicode::charAmpersand);
   
       for(XalanDOMCharVectorType::const_iterator i = s.begin(); *i != 0; ++i)
       {
  -             accum(*i);
  +             accumContent(*i);
       }
   
  -    accum(XalanUnicode::charSemicolon);
  +    accumContent(XalanUnicode::charSemicolon);
   }
   
   
  @@ -932,18 +924,18 @@
                        const XalanDOMChar*             value,
                        const ElemDesc&                 elemDesc)
   {
  -    accum(XalanUnicode::charSpace);
  +    accumContent(XalanUnicode::charSpace);
   
       if(elemDesc.isAttrFlagSet(name, ElemDesc::ATTREMPTY) == true &&
          (length(value) == 0) || equalsIgnoreCaseASCII(value, name) == true)
       {
  -             writeCharacters(name);
  +             accumName(name);
       }
       else
       {
  -             writeCharacters(name);
  -             accum(XalanUnicode::charEqualsSign);
  -             accum(XalanUnicode::charQuoteMark);
  +             accumName(name);
  +             accumContent(XalanUnicode::charEqualsSign);
  +             accumContent(XalanUnicode::charQuoteMark);
   
                if(elemDesc.isAttrFlagSet(name, ElemDesc::ATTRURL) == true)
                {
  @@ -954,7 +946,7 @@
                        writeAttrString(value, m_encoding);
                }
   
  -             accum(XalanUnicode::charQuoteMark);
  +             accumContent(XalanUnicode::charQuoteMark);
       }
   }
   
  @@ -979,17 +971,17 @@
   
                        if(b1 != 0)
                        {
  -                             accum(XalanUnicode::charPercentSign);
  +                             accumContent(XalanUnicode::charPercentSign);
   
  -                             accum(UnsignedLongToHexDOMString(b1));
  +                             accumContent(UnsignedLongToHexDOMString(b1));
                        }
   
  -                     accum(XalanUnicode::charPercentSign);
  -                     accum(UnsignedLongToHexDOMString(b2));          
  +                     accumContent(XalanUnicode::charPercentSign);
  +                     accumContent(UnsignedLongToHexDOMString(b2));           
                }       
                else
                {
  -                     accum(ch);
  +                     accumContent(ch);
                }
        }
   }
  
  
  
  1.16      +1 -4      xml-xalan/c/src/XMLSupport/FormatterToHTML.hpp
  
  Index: FormatterToHTML.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToHTML.hpp,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- FormatterToHTML.hpp       2000/12/06 21:15:01     1.15
  +++ FormatterToHTML.hpp       2000/12/12 16:34:10     1.16
  @@ -58,7 +58,7 @@
   #define FORMATTERTOHTML_HEADER_GUARD_1357924680
   
   /**
  - * $Id: FormatterToHTML.hpp,v 1.15 2000/12/06 21:15:01 dbertoni Exp $
  + * $Id: FormatterToHTML.hpp,v 1.16 2000/12/12 16:34:10 dbertoni Exp $
    * 
    * $State: Exp $
    * 
  @@ -285,9 +285,6 @@
        writeAttrString(
                        const XalanDOMChar*             string,
                        const XalanDOMString&   encoding);
  -
  -     virtual void
  -     commentData(const XalanDOMChar*         data);
   
        void
        writeCharacters(const XalanDOMString&   theString);
  
  
  
  1.38      +265 -167  xml-xalan/c/src/XMLSupport/FormatterToXML.cpp
  
  Index: FormatterToXML.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToXML.cpp,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- FormatterToXML.cpp        2000/12/06 21:15:03     1.37
  +++ FormatterToXML.cpp        2000/12/12 16:34:11     1.38
  @@ -133,7 +133,9 @@
        m_pos(0),
        m_byteBuf(),
        m_level(0),
  -     m_elemStack()
  +     m_elemStack(),
  +     m_accumNameFunction(0),
  +     m_accumContentFunction(0)
   {
        assert(isEmpty(m_encoding) == false);
   
  @@ -173,10 +175,18 @@
                m_bytesEqualChars = true;
   
                m_byteBuf.resize(s_maxBufferSize);
  +
  +             m_accumNameFunction = accumNameAsByte;
  +
  +             m_accumContentFunction = accumContentAsByte;
        }
        else
        {
                m_charBuf.resize(s_maxBufferSize);
  +
  +             m_accumNameFunction = accumNameAsChar;
  +
  +             m_accumContentFunction = accumContentAsChar;
        }
   
        // Do this last so we initialize the map according to the value of
  @@ -244,26 +254,26 @@
   void
   FormatterToXML::outputDocTypeDecl(const XalanDOMChar*        name)
   {
  -     accum(s_doctypeHeaderStartString);      // "<!DOCTYPE "
  +     accumName(s_doctypeHeaderStartString);  // "<!DOCTYPE "
   
  -     accum(name);
  +     accumName(name);
          
        if(length(m_doctypePublic) != 0)
        {
  -             accum(s_doctypeHeaderPublicString); // " PUBLIC \""
  -             accum(m_doctypePublic);
  -             accum(XalanUnicode::charQuoteMark);
  -             accum(XalanUnicode::charSpace);
  -             accum(XalanUnicode::charQuoteMark);
  +             accumName(s_doctypeHeaderPublicString); // " PUBLIC \""
  +             accumName(m_doctypePublic);
  +             accumName(XalanUnicode::charQuoteMark);
  +             accumName(XalanUnicode::charSpace);
  +             accumName(XalanUnicode::charQuoteMark);
        }
        else
        {
  -             accum(s_doctypeHeaderSystemString); // " SYSTEM \""
  +             accumName(s_doctypeHeaderSystemString); // " SYSTEM \""
        }
   
  -     accum(m_doctypeSystem);
  -     accum(XalanUnicode::charQuoteMark);
  -     accum(XalanUnicode::charGreaterThanSign);
  +     accumName(m_doctypeSystem);
  +     accumName(XalanUnicode::charQuoteMark);
  +     accumName(XalanUnicode::charGreaterThanSign);
   
        outputLineSep();
   }
  @@ -271,50 +281,109 @@
   
   
   void
  -FormatterToXML::accum(XalanDOMChar   ch)
  +FormatterToXML::accumNameAsByte(XalanDOMChar ch)
   {
  -     if (m_bytesEqualChars == true)
  +     if (ch > m_maxCharacter)
        {
  -             if (ch > 255)
  -             {
  -                     writeNumberedEntityReference(ch);
  -             }
  -             else
  -             {
  -                     m_byteBuf[m_pos++] = char(ch);
  -             }
  +             m_byteBuf[m_pos++] = char(XalanUnicode::charQuestionMark);
  +     }
  +     else
  +     {
  +             m_byteBuf[m_pos++] = char(ch);
  +     }
   
  -             if(m_pos == s_maxBufferSize)
  -             {
  -                     flushBytes();
  -             }
  +     if(m_pos == s_maxBufferSize)
  +     {
  +             flushBytes();
        }
  +}
  +
  +
  +
  +void
  +FormatterToXML::accumContentAsByte(XalanDOMChar              ch)
  +{
  +     if (ch > m_maxCharacter)
  +     {
  +             writeNumberedEntityReference(ch);
  +     }
        else
        {
  +             m_byteBuf[m_pos++] = char(ch);
  +     }
  +
  +     if(m_pos == s_maxBufferSize)
  +     {
  +             flushBytes();
  +     }
  +}
  +
  +
  +
  +void
  +FormatterToXML::accumNameAsChar(XalanDOMChar ch)
  +{
  +     if (ch > m_maxCharacter)
  +     {
  +             m_charBuf[m_pos++] = char(XalanUnicode::charQuestionMark);
  +     }
  +     else
  +     {
                m_charBuf[m_pos++] = ch;
  +     }
   
  -             if(m_pos == s_maxBufferSize)
  -             {
  -                     flushChars();
  -             }
  +     if(m_pos == s_maxBufferSize)
  +     {
  +             flushChars();
  +     }
  +}
  +
  +
  +
  +void
  +FormatterToXML::accumContentAsChar(XalanDOMChar      ch)
  +{
  +     if (ch > m_maxCharacter)
  +     {
  +             writeNumberedEntityReference(ch);
  +     }
  +     else
  +     {
  +             m_charBuf[m_pos++] = ch;
  +     }
  +
  +     if(m_pos == s_maxBufferSize)
  +     {
  +             flushChars();
        }
   }
   
   
   
   void
  -FormatterToXML::accum(const XalanDOMChar*    chars)
  +FormatterToXML::accumName(const XalanDOMChar*        chars)
   {
        for(; *chars!= 0; ++chars)
        {
  -             accum(*chars);
  +             accumName(*chars);
        }
   }
   
   
   
   void
  -FormatterToXML::accum(
  +FormatterToXML::accumContent(const XalanDOMChar*     chars)
  +{
  +     for(; *chars!= 0; ++chars)
  +     {
  +             accumContent(*chars);
  +     }
  +}
  +
  +
  +
  +void
  +FormatterToXML::accumName(
                        const XalanDOMChar      chars[],
                        unsigned int            start,
                        unsigned int            length)
  @@ -323,29 +392,61 @@
   
        for(DOMCharBufferType::size_type i = start; i < n; ++i)
        {
  -             accum(chars[i]);
  +             accumName(chars[i]);
        }
   }
   
   
   
   void
  -FormatterToXML::accum(const XalanDOMString&          str)
  +FormatterToXML::accumContent(
  +                     const XalanDOMChar      chars[],
  +                     unsigned int            start,
  +                     unsigned int            length)
   {
  -     accum(c_wstr(str), 0, length(str));
  +     const DOMCharBufferType::size_type      n = start + length;
  +
  +     for(DOMCharBufferType::size_type i = start; i < n; ++i)
  +     {
  +             accumContent(chars[i]);
  +     }
   }
   
   
   
   void
  -FormatterToXML::accum(const XalanDOMCharVectorType&  theVector)
  +FormatterToXML::accumName(const XalanDOMString&              str)
   {
  -     accum(c_wstr(theVector), 0, theVector.size() - 1);
  +     accumName(c_wstr(str), 0, length(str));
   }
   
   
   
   void
  +FormatterToXML::accumContent(const XalanDOMString&   str)
  +{
  +     accumContent(c_wstr(str), 0, length(str));
  +}
  +
  +
  +
  +void
  +FormatterToXML::accumName(const XalanDOMCharVectorType&      theVector)
  +{
  +     accumName(c_wstr(theVector), 0, theVector.size() - 1);
  +}
  +
  +
  +
  +void
  +FormatterToXML::accumContent(const XalanDOMCharVectorType&   theVector)
  +{
  +     accumContent(c_wstr(theVector), 0, theVector.size() - 1);
  +}
  +
  +
  +
  +void
   FormatterToXML::throwInvalidUTF16SurrogateException(XalanDOMChar     ch)
   {
        const XalanDOMString    theMessage(TranscodeFromLocalCodePage("Invalid 
UTF-16 surrogate detected: ") +
  @@ -413,7 +514,7 @@
                        }
                        else
                        {
  -                             accum(ch);
  +                             accumContent(ch);
                        }
                }
        }
  @@ -459,43 +560,43 @@
        }
        else if (XalanUnicode::charLessThanSign == ch) 
        {
  -             accum(XalanUnicode::charAmpersand);
  -             accum(XalanUnicode::charLetter_l);
  -             accum(XalanUnicode::charLetter_t);
  -             accum(XalanUnicode::charSemicolon);
  +             accumContent(XalanUnicode::charAmpersand);
  +             accumContent(XalanUnicode::charLetter_l);
  +             accumContent(XalanUnicode::charLetter_t);
  +             accumContent(XalanUnicode::charSemicolon);
        }
        else if (XalanUnicode::charGreaterThanSign == ch) 
        {
  -             accum(XalanUnicode::charAmpersand);
  -             accum(XalanUnicode::charLetter_g);
  -             accum(XalanUnicode::charLetter_t);
  -             accum(XalanUnicode::charSemicolon);
  +             accumContent(XalanUnicode::charAmpersand);
  +             accumContent(XalanUnicode::charLetter_g);
  +             accumContent(XalanUnicode::charLetter_t);
  +             accumContent(XalanUnicode::charSemicolon);
        }
        else if (XalanUnicode::charAmpersand == ch) 
        {
  -             accum(XalanUnicode::charAmpersand);
  -             accum(XalanUnicode::charLetter_a);
  -             accum(XalanUnicode::charLetter_m);
  -             accum(XalanUnicode::charLetter_p);
  -             accum(XalanUnicode::charSemicolon);
  +             accumContent(XalanUnicode::charAmpersand);
  +             accumContent(XalanUnicode::charLetter_a);
  +             accumContent(XalanUnicode::charLetter_m);
  +             accumContent(XalanUnicode::charLetter_p);
  +             accumContent(XalanUnicode::charSemicolon);
        }
        else if (XalanUnicode::charQuoteMark == ch) 
        {
  -             accum(XalanUnicode::charAmpersand);
  -             accum(XalanUnicode::charLetter_q);
  -             accum(XalanUnicode::charLetter_u);
  -             accum(XalanUnicode::charLetter_o);
  -             accum(XalanUnicode::charLetter_t);
  -             accum(XalanUnicode::charSemicolon);
  +             accumContent(XalanUnicode::charAmpersand);
  +             accumContent(XalanUnicode::charLetter_q);
  +             accumContent(XalanUnicode::charLetter_u);
  +             accumContent(XalanUnicode::charLetter_o);
  +             accumContent(XalanUnicode::charLetter_t);
  +             accumContent(XalanUnicode::charSemicolon);
        }
        else if (XalanUnicode::charApostrophe == ch) 
        {
  -             accum(XalanUnicode::charAmpersand);
  -             accum(XalanUnicode::charLetter_a);
  -             accum(XalanUnicode::charLetter_p);
  -             accum(XalanUnicode::charLetter_o);
  -             accum(XalanUnicode::charLetter_s);
  -             accum(XalanUnicode::charSemicolon);
  +             accumContent(XalanUnicode::charAmpersand);
  +             accumContent(XalanUnicode::charLetter_a);
  +             accumContent(XalanUnicode::charLetter_p);
  +             accumContent(XalanUnicode::charLetter_o);
  +             accumContent(XalanUnicode::charLetter_s);
  +             accumContent(XalanUnicode::charSemicolon);
        }
        else
        {
  @@ -572,35 +673,35 @@
   
                if(m_shouldWriteXMLHeader == true)
                {
  -                     accum(s_xmlHeaderStartString);  // "<?xml version=\""
  +                     accumName(s_xmlHeaderStartString);      // "<?xml 
version=\""
   
                        if (length(m_version) != 0)
                        {
  -                             accum(m_version);
  +                             accumName(m_version);
                        }
                        else
                        {
  -                             accum(s_defaultVersionString);
  +                             accumName(s_defaultVersionString);
                        }
   
  -                     accum(s_xmlHeaderEncodingString);       // "\" 
encoding=\""
  +                     accumName(s_xmlHeaderEncodingString);   // "\" 
encoding=\""
   
                        if (isEmpty(m_encoding) == true)
                        {       
  -                             accum(s_iso88591String);
  +                             accumName(s_iso88591String);
                        }
                        else
                        {
  -                             accum(m_encoding);
  +                             accumName(m_encoding);
                        }
   
                        if (length(m_standalone) != 0)
                        {
  -                             accum(s_xmlHeaderStandaloneString);
  -                             accum(m_standalone);
  +                             accumName(s_xmlHeaderStandaloneString);
  +                             accumName(m_standalone);
                        }
   
  -                     accum(s_xmlHeaderEndString);
  +                     accumName(s_xmlHeaderEndString);
   
                        outputLineSep();
                }          
  @@ -650,8 +751,8 @@
   
                m_startNewLine = true;
   
  -             accum(XalanUnicode::charLessThanSign);
  -             accum(name);
  +             accumName(XalanUnicode::charLessThanSign);
  +             accumName(name);
   
                const unsigned int      nAttrs = attrs.getLength();
   
  @@ -685,21 +786,21 @@
                        indent(m_currentIndent);
                }
   
  -             accum(XalanUnicode::charLessThanSign);
  -             accum(XalanUnicode::charSolidus);
  -             accum(name);
  +             accumName(XalanUnicode::charLessThanSign);
  +             accumName(XalanUnicode::charSolidus);
  +             accumName(name);
        }
        else
        {
                if(m_spaceBeforeClose == true)
                {
  -                     accum(XalanUnicode::charSpace);
  +                     accumName(XalanUnicode::charSpace);
                }
   
  -             accum(XalanUnicode::charSolidus);
  +             accumName(XalanUnicode::charSolidus);
        }
   
  -     accum(XalanUnicode::charGreaterThanSign);
  +     accumName(XalanUnicode::charGreaterThanSign);
   
        if (hasChildNodes == true) 
        {
  @@ -743,21 +844,21 @@
                                indent(m_currentIndent);
                        }
   
  -                     accum(XalanUnicode::charLessThanSign);
  -                     accum(XalanUnicode::charQuestionMark);
  -                     accum(target);
  +                     accumName(XalanUnicode::charLessThanSign);
  +                     accumName(XalanUnicode::charQuestionMark);
  +                     accumName(target);
   
                        const unsigned int      len = length(data);
   
                        if ( len > 0 && !isXMLWhitespace(data[0]))
                        {
  -                             accum(XalanUnicode::charSpace);
  +                             accumName(XalanUnicode::charSpace);
                        }
   
                        accumNormalizedPIData(data, len);
   
  -                     accum(XalanUnicode::charQuestionMark);
  -                     accum(XalanUnicode::charGreaterThanSign);
  +                     accumName(XalanUnicode::charQuestionMark);
  +                     accumName(XalanUnicode::charGreaterThanSign);
   
                        m_startNewLine = true;
                }
  @@ -801,7 +902,7 @@
                                }
                                else
                                {
  -                                     accum(ch);
  +                                     accumContent(ch);
                                }
                        }
   
  @@ -826,7 +927,7 @@
   
                m_ispreserve = true;
   
  -             accum(chars, 0, length);
  +             accumContent(chars, 0, length);
        }
   }
   
  @@ -851,7 +952,7 @@
                }
                else
                {
  -                     accum(ch);
  +                     accumName(ch);
                }
       }
   }
  @@ -859,14 +960,6 @@
   
   
   void
  -FormatterToXML::commentData(const XalanDOMChar*              data)
  -{
  -     accum(data);
  -}
  -
  -
  -
  -void
   FormatterToXML::writeNormalizedChars(
                        const XalanDOMChar      ch[],
                        unsigned int            start,
  @@ -903,7 +996,7 @@
                {
                        if(i != 0)
                        {
  -                             accum(s_dtdCDATACloseString);
  +                             accumContent(s_dtdCDATACloseString);
                        }
   
                        // This needs to go into a function... 
  @@ -938,15 +1031,15 @@
                        if(i != 0 && i < end - 1)
                        {
                                // "<![CDATA["
  -                             accum(XalanUnicode::charLessThanSign);
  -                             accum(XalanUnicode::charExclamationMark);
  -                             accum(XalanUnicode::charLeftSquareBracket);
  -                             accum(XalanUnicode::charLetter_C);
  -                             accum(XalanUnicode::charLetter_D);
  -                             accum(XalanUnicode::charLetter_A);
  -                             accum(XalanUnicode::charLetter_T);
  -                             accum(XalanUnicode::charLetter_A);
  -                             accum(XalanUnicode::charLeftSquareBracket);
  +                             accumContent(XalanUnicode::charLessThanSign);
  +                             accumContent(XalanUnicode::charExclamationMark);
  +                             
accumContent(XalanUnicode::charLeftSquareBracket);
  +                             accumContent(XalanUnicode::charLetter_C);
  +                             accumContent(XalanUnicode::charLetter_D);
  +                             accumContent(XalanUnicode::charLetter_A);
  +                             accumContent(XalanUnicode::charLetter_T);
  +                             accumContent(XalanUnicode::charLetter_A);
  +                             
accumContent(XalanUnicode::charLeftSquareBracket);
                        }
                }
                else if(isCData == true &&
  @@ -956,21 +1049,21 @@
                                XalanUnicode::charGreaterThanSign == ch[ i + 2])
                {
                        // "]]]]><![CDATA[>"
  -                     accum(XalanUnicode::charRightSquareBracket);
  -                     accum(XalanUnicode::charRightSquareBracket);
  -                     accum(XalanUnicode::charRightSquareBracket);
  -                     accum(XalanUnicode::charRightSquareBracket);
  -                     accum(XalanUnicode::charGreaterThanSign);
  -                     accum(XalanUnicode::charLessThanSign);
  -                     accum(XalanUnicode::charExclamationMark);
  -                     accum(XalanUnicode::charLeftSquareBracket);
  -                     accum(XalanUnicode::charLetter_C);
  -                     accum(XalanUnicode::charLetter_D);
  -                     accum(XalanUnicode::charLetter_A);
  -                     accum(XalanUnicode::charLetter_T);
  -                     accum(XalanUnicode::charLetter_A);
  -                     accum(XalanUnicode::charLeftSquareBracket);
  -                     accum(XalanUnicode::charGreaterThanSign);
  +                     accumContent(XalanUnicode::charRightSquareBracket);
  +                     accumContent(XalanUnicode::charRightSquareBracket);
  +                     accumContent(XalanUnicode::charRightSquareBracket);
  +                     accumContent(XalanUnicode::charRightSquareBracket);
  +                     accumContent(XalanUnicode::charGreaterThanSign);
  +                     accumContent(XalanUnicode::charLessThanSign);
  +                     accumContent(XalanUnicode::charExclamationMark);
  +                     accumContent(XalanUnicode::charLeftSquareBracket);
  +                     accumContent(XalanUnicode::charLetter_C);
  +                     accumContent(XalanUnicode::charLetter_D);
  +                     accumContent(XalanUnicode::charLetter_A);
  +                     accumContent(XalanUnicode::charLetter_T);
  +                     accumContent(XalanUnicode::charLetter_A);
  +                     accumContent(XalanUnicode::charLeftSquareBracket);
  +                     accumContent(XalanUnicode::charGreaterThanSign);
   
                        i += 2;
                }
  @@ -978,7 +1071,7 @@
                {
                        if(c <= m_maxCharacter)
                        {
  -                             accum(c);
  +                             accumContent(c);
                        }
                        // This needs to go into a function...
                        else if (0xd800 <= c && c < 0xdc00)
  @@ -1017,10 +1110,10 @@
   void
   FormatterToXML::writeNumberedEntityReference(unsigned long   theNumber)
   {
  -     accum(XalanUnicode::charAmpersand);
  -     accum(XalanUnicode::charNumberSign);
  -     accum(UnsignedLongToDOMString(theNumber));
  -     accum(XalanUnicode::charSemicolon);
  +     accumContent(XalanUnicode::charAmpersand);
  +     accumContent(XalanUnicode::charNumberSign);
  +     accumContent(UnsignedLongToDOMString(theNumber));
  +     accumContent(XalanUnicode::charSemicolon);
   }
   
   
  @@ -1035,9 +1128,9 @@
                indent(m_currentIndent);
        }
   
  -     m_writer.write(XalanUnicode::charAmpersand);
  -     m_writer.write(name);
  -     m_writer.write(XalanUnicode::charSemicolon);
  +     accumName(XalanUnicode::charAmpersand);
  +     accumName(name);
  +     accumName(XalanUnicode::charSemicolon);
   }
   
   
  @@ -1075,16 +1168,16 @@
                        indent(m_currentIndent);
                }
   
  -             accum(XalanUnicode::charLessThanSign);
  -             accum(XalanUnicode::charExclamationMark);
  -             accum(XalanUnicode::charHyphenMinus);
  -             accum(XalanUnicode::charHyphenMinus);
  -
  -             commentData(data);
  -
  -             accum(XalanUnicode::charHyphenMinus);
  -             accum(XalanUnicode::charHyphenMinus);
  -             accum(XalanUnicode::charGreaterThanSign);
  +             accumName(XalanUnicode::charLessThanSign);
  +             accumName(XalanUnicode::charExclamationMark);
  +             accumName(XalanUnicode::charHyphenMinus);
  +             accumName(XalanUnicode::charHyphenMinus);
  +
  +             accumName(data);
  +
  +             accumName(XalanUnicode::charHyphenMinus);
  +             accumName(XalanUnicode::charHyphenMinus);
  +             accumName(XalanUnicode::charGreaterThanSign);
   
                m_startNewLine = true;
        }
  @@ -1126,15 +1219,15 @@
                                   ch[0] <= m_maxCharacter)
                                {
                                        // "<![CDATA["
  -                                     accum(XalanUnicode::charLessThanSign);
  -                                     
accum(XalanUnicode::charExclamationMark);
  -                                     
accum(XalanUnicode::charLeftSquareBracket);
  -                                     accum(XalanUnicode::charLetter_C);
  -                                     accum(XalanUnicode::charLetter_D);
  -                                     accum(XalanUnicode::charLetter_A);
  -                                     accum(XalanUnicode::charLetter_T);
  -                                     accum(XalanUnicode::charLetter_A);
  -                                     
accum(XalanUnicode::charLeftSquareBracket);
  +                                     
accumContent(XalanUnicode::charLessThanSign);
  +                                     
accumContent(XalanUnicode::charExclamationMark);
  +                                     
accumContent(XalanUnicode::charLeftSquareBracket);
  +                                     
accumContent(XalanUnicode::charLetter_C);
  +                                     
accumContent(XalanUnicode::charLetter_D);
  +                                     
accumContent(XalanUnicode::charLetter_A);
  +                                     
accumContent(XalanUnicode::charLetter_T);
  +                                     
accumContent(XalanUnicode::charLetter_A);
  +                                     
accumContent(XalanUnicode::charLeftSquareBracket);
                                }
                        }
   
  @@ -1145,9 +1238,9 @@
                                if(length >= 1 &&
                                   ch[length - 1] <= m_maxCharacter)
                                {
  -                                     
accum(XalanUnicode::charRightSquareBracket);
  -                                     
accum(XalanUnicode::charRightSquareBracket);
  -                                     
accum(XalanUnicode::charGreaterThanSign);
  +                                     
accumContent(XalanUnicode::charRightSquareBracket);
  +                                     
accumContent(XalanUnicode::charRightSquareBracket);
  +                                     
accumContent(XalanUnicode::charGreaterThanSign);
                                }
                        }
                }
  @@ -1164,7 +1257,8 @@
                // See if the parent element has already been flagged as having 
children.
                if(false == m_elemStack.back())
                {
  -                     accum(XalanUnicode::charGreaterThanSign);
  +                     accumContent(XalanUnicode::charGreaterThanSign);
  +
                        m_isprevtext = false;
   
                        m_elemStack.pop_back();
  @@ -1207,12 +1301,12 @@
                        const XalanDOMChar*     name,
                        const XalanDOMChar*     value)
   {
  -     accum(XalanUnicode::charSpace);
  -     accum(name);
  -     accum(XalanUnicode::charEqualsSign);
  -     accum(XalanUnicode::charQuoteMark);
  +     accumContent(XalanUnicode::charSpace);
  +     accumName(name);
  +     accumContent(XalanUnicode::charEqualsSign);
  +     accumContent(XalanUnicode::charQuoteMark);
        writeAttrString(value, m_encoding);
  -     accum(XalanUnicode::charQuoteMark);
  +     accumContent(XalanUnicode::charQuoteMark);
   }
   
   
  @@ -1221,10 +1315,10 @@
   FormatterToXML::outputLineSep()
   {
   #if defined(XALAN_NEWLINE_IS_CRLF)
  -     accum(XalanUnicode::charCR);
  -     accum(XalanUnicode::charLF);
  +     accumContent(XalanUnicode::charCR);
  +     accumContent(XalanUnicode::charLF);
   #else
  -     accum(XalanUnicode::charLF);
  +     accumContent(XalanUnicode::charLF);
   #endif
   }
   
  @@ -1235,7 +1329,7 @@
   {
        for (int i = 0;  i < n;  i ++)
        {
  -             accum(XalanUnicode::charSpace);
  +             accumContent(XalanUnicode::charSpace);
        }
   }
   
  @@ -1270,14 +1364,16 @@
        {
                const XalanDOMChar      theChar = theData[i];
   
  -             if (theChar == XalanUnicode::charQuestionMark && i + 1 < 
theLength && theData[i + 1] == XalanUnicode::charGreaterThanSign)
  +             if (theChar == XalanUnicode::charQuestionMark &&
  +                     i + 1 < theLength &&
  +                     theData[i + 1] == XalanUnicode::charGreaterThanSign)
                {
  -                     accum(XalanUnicode::charQuestionMark);
  -                     accum(XalanUnicode::charSpace);
  +                     accumContent(XalanUnicode::charQuestionMark);
  +                     accumContent(XalanUnicode::charSpace);
                }
                else
                {
  -                     accum(theChar);
  +                     accumName(theChar);
                }
        }
   }
  @@ -1309,6 +1405,8 @@
                s_revhash.find(toUpperCase(encoding));
        return (*it).second;
   }
  +
  +
   
   void FormatterToXML::initEncodings() 
   {
  
  
  
  1.25      +122 -13   xml-xalan/c/src/XMLSupport/FormatterToXML.hpp
  
  Index: FormatterToXML.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToXML.hpp,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- FormatterToXML.hpp        2000/12/06 21:15:04     1.24
  +++ FormatterToXML.hpp        2000/12/12 16:34:11     1.25
  @@ -349,20 +349,53 @@
   
        /**
         * Append a wide character to the buffer.
  +      * Characters that are not representable
  +      * in the encoding are not written as
  +      * entities.
         *
         * @ch the character to append.
         */
        void
  -     accum(XalanDOMChar      ch);
  +     accumName(XalanDOMChar  ch)
  +     {
  +             assert(m_accumNameFunction != 0);
  +
  +             (this->*m_accumNameFunction)(ch);
  +     }
   
        /**
  +      * Append a wide character to the buffer.
  +      * Characters that are not representable
  +      * in the encoding are not written as
  +      * entities.
  +      *
  +      * @ch the character to append.
  +      */
  +     void
  +     accumContent(XalanDOMChar       ch)
  +     {
  +             assert(m_accumContentFunction != 0);
  +
  +             (this->*m_accumContentFunction)(ch);
  +     }
  +
  +     /**
  +      * Append a null-terminated array of wide characters to
  +      * the buffer.
  +      *
  +      * @chars the array to append
  +      */
  +     void
  +     accumName(const XalanDOMChar*   chars);
  +
  +     /**
         * Append a null-terminated array of wide characters to
         * the buffer.
         *
         * @chars the array to append
         */
        void
  -     accum(const XalanDOMChar*       chars);
  +     accumContent(const XalanDOMChar*                chars);
   
        /**
         * Append an array of wide character to the buffer.
  @@ -372,18 +405,41 @@
         * @length the number of characters to append
         */
        void
  -     accum(
  +     accumName(
                        const XalanDOMChar      chars[],
                        unsigned int            start,
                        unsigned int            length);
   
        /**
  +      * Append an array of wide character to the buffer.
  +      *
  +      * @chars the array to append
  +      * @start the offset into the array to start from
  +      * @length the number of characters to append
  +      */
  +     void
  +     accumContent(
  +                     const XalanDOMChar      chars[],
  +                     unsigned int            start,
  +                     unsigned int            length);
  +
  +     /**
  +      * Append a string to the buffer.
  +      *
  +      * @param str the string to append
  +      */
  +     void
  +     accumName(const XalanDOMString&         str);
  +
  +     typedef void (FormatterToXML::*AccumFunctionType)(XalanDOMChar);
  +
  +     /**
         * Append a string to the buffer.
         *
         * @param str the string to append
         */
        void
  -     accum(const XalanDOMString&             str);
  +     accumContent(const XalanDOMString&      str);
   
        /**
         * Append a vector of wide characters to the buffer.
  @@ -391,9 +447,17 @@
         * @param theVector the vector to append
         */
        void
  -     accum(const XalanDOMCharVectorType&             theVector);
  +     accumName(const XalanDOMCharVectorType&         theVector);
   
        /**
  +      * Append a vector of wide characters to the buffer.
  +      *
  +      * @param theVector the vector to append
  +      */
  +     void
  +     accumContent(const XalanDOMCharVectorType&      theVector);
  +
  +     /**
         * Escape and accum a character.
         */
        void
  @@ -505,13 +569,6 @@
                        const XalanDOMString&   encoding);
   
        /**
  -      * Write the data of a comment.
  -      * @param data The string to write.
  -      */
  -     virtual void
  -     commentData(const XalanDOMChar*         data);
  -
  -     /**
         * Throw an exception when an invalid
         * surrogate is encountered.
         * @param ch The first character in the surrogate
  @@ -656,6 +713,46 @@
        initEncodings();
   
        /**
  +      * Append a wide character to the buffer.
  +      * Characters that are not representable
  +      * in the encoding are not written as
  +      * entities.
  +      *
  +      * @ch the character to append.
  +      */
  +     void
  +     accumNameAsByte(XalanDOMChar    ch);
  +
  +     /**
  +      * Append a wide character to the buffer.
  +      * Characters that are not representable
  +      * in the encoding are written as entities.
  +      *
  +      * @ch the character to append.
  +      */
  +     void
  +     accumContentAsByte(XalanDOMChar         ch);
  +
  +     /**
  +      * Append a wide character to the buffer.
  +      * Characters that are not representable
  +      * in the encoding are not written as
  +      * entities.
  +      *
  +      * @ch the character to append.
  +      */
  +     void
  +     accumNameAsChar(XalanDOMChar    ch);
  +
  +     /**
  +      * Append a wide character to the buffer.
  +      *
  +      * @ch the character to append.
  +      */
  +     void
  +     accumContentAsChar(XalanDOMChar         ch);
  +
  +     /**
         * Output the doc type declaration.
         *
         * @param name the name of the doctype.
  @@ -817,8 +914,20 @@
        /**
         * A stack of Boolean objects that tell if the given element 
         * has children.
  +      */
  +     BoolStackType           m_elemStack;
  +
  +     /**
  +      * A pointer to the member function that will do the accumulating
  +      * for names.
  +      */
  +     AccumFunctionType       m_accumNameFunction;
  +
  +     /**
  +      * A pointer to the member function that will do the accumulating
  +      * for content.
         */
  -     BoolStackType   m_elemStack;
  +     AccumFunctionType       m_accumContentFunction;
   };
   
   
  
  
  

Reply via email to