dbertoni    00/05/24 12:26:14

  Modified:    c/src/XMLSupport FormatterToXML.cpp FormatterToXML.hpp
  Log:
  Fix for normalizing PI data.
  
  Revision  Changes    Path
  1.19      +32 -3     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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- FormatterToXML.cpp        2000/05/18 18:37:23     1.18
  +++ FormatterToXML.cpp        2000/05/24 19:26:12     1.19
  @@ -71,7 +71,7 @@
   
   
   
  -static XalanDOMChar          theDefaultAttrSpecialChars[] = {'<', '>', '&', 
'"', '\r', '\n' };
  +static const XalanDOMChar    theDefaultAttrSpecialChars[] = {'<', '>', '&', 
'"', '\r', '\n', 0 };
   
   
   const XalanDOMCharVectorType FormatterToXML::s_xsltNextIsRawString =
  @@ -805,12 +805,14 @@
                        accum('?');
                        accum(target);
   
  -                     if (length(data) > 0 && !isSpace(data[0]))
  +                     const unsigned int      len = length(data);
  +
  +                     if ( len > 0 && !isSpace(data[0]))
                        {
                                accum(' ');
                        }
   
  -                     accum(data);
  +                     accumNormalizedPIData(data, len);
   
                        accum('?');
                        accum('>');
  @@ -1241,6 +1243,33 @@
        if(m_doIndent == true)
        {
                printSpace(n);
  +     }
  +}
  +
  +
  +
  +void
  +FormatterToXML::accumNormalizedPIData(
  +                     const XalanDOMChar*             theData,
  +                     unsigned int                    theLength)
  +{
  +     // If there are any "?>" pairs in the string,
  +     // we have to normalize them to "? >", so they
  +     // won't be confused with the end tag.
  +
  +     for (unsigned int i = 0; i < theLength; ++i)
  +     {
  +             const XalanDOMChar      theChar = theData[i];
  +
  +             if (theChar == '?' && i + 1 < theLength && theData[i + 1] == 
'>')
  +             {
  +                     accum('?');
  +                     accum(' ');
  +             }
  +             else
  +             {
  +                     accum(theChar);
  +             }
        }
   }
   
  
  
  
  1.12      +18 -3     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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- FormatterToXML.hpp        2000/05/18 18:37:23     1.11
  +++ FormatterToXML.hpp        2000/05/24 19:26:12     1.12
  @@ -67,7 +67,6 @@
   
   #include <stack>
   #include <vector>
  -//#include <map>
   
   
   
  @@ -96,6 +95,11 @@
   {
   public:
   
  +     enum eDummy
  +     {
  +             eDefaultIndentAmount = 4
  +     };
  +
        /**
         * Constructor for customized encoding and doctype.
         *
  @@ -120,7 +124,7 @@
                        Writer&                                 writer,
                        const XalanDOMString&   version = XalanDOMString(),
                        bool                                    doIndent = 
false,
  -                     int                                             indent 
= 0,
  +                     int                                             indent 
= eDefaultIndentAmount,
                        const XalanDOMString&   encoding = XalanDOMString(),
                        const XalanDOMString&   mediaType = XalanDOMString(),
                        const XalanDOMString&   doctypeSystem = 
XalanDOMString(),
  @@ -499,7 +503,7 @@
                        XalanDOMChar    ch,
                        unsigned int    next);
   
  -     enum eDummy { SPECIALSSIZE = 256};
  +     enum eDummyTwo { SPECIALSSIZE = 256};
   
        /**
         * The maximum character size before we have to resort 
  @@ -668,6 +672,17 @@
                        accum(' ');
                }
        }
  +
  +     /**
  +      * Normalize the data in a PI, to replace any
  +      * "?>" pairs with "? >"
  +      * @param theData the data to normalize.
  +      */
  +     void
  +     accumNormalizedPIData(
  +                     const XalanDOMChar*             theData,
  +                     unsigned int                    theLength);
  +
   
        // Data members...
        bool            m_shouldFlush;
  
  
  

Reply via email to