dbertoni    2002/12/11 14:51:41

  Modified:    c/src/XSLT StylesheetRoot.cpp StylesheetRoot.hpp
  Log:
  Don't honor cdata-section-elements for HTML output.  Make sure we honor the encoding 
the XSLTResultTarget instance.  Fixed bugzilla 13284.
  
  Revision  Changes    Path
  1.71      +45 -17    xml-xalan/c/src/XSLT/StylesheetRoot.cpp
  
  Index: StylesheetRoot.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetRoot.cpp,v
  retrieving revision 1.70
  retrieving revision 1.71
  diff -u -r1.70 -r1.71
  --- StylesheetRoot.cpp        25 Nov 2002 18:11:53 -0000      1.70
  +++ StylesheetRoot.cpp        11 Dec 2002 22:51:40 -0000      1.71
  @@ -177,7 +177,12 @@
                m_needToBuildKeysTable = true;
        }
   
  -     if (m_cdataSectionElems.size() > 0)
  +     // cdata-section-elements only applies to the XML output method...
  +     if (m_outputMethod != FormatterListener::OUTPUT_METHOD_XML)
  +     {
  +             m_cdataSectionElems.clear();
  +     }
  +     else if (m_cdataSectionElems.size() > 0)
        {
                XALAN_USING_STD(sort)
   
  @@ -270,6 +275,23 @@
   
   
   
  +const XalanDOMString&
  +StylesheetRoot::getEncoding(const XSLTResultTarget&          outputTarget) const
  +{
  +     const XalanDOMString&   theEncoding = outputTarget.getEncoding();
  +
  +     if (theEncoding.length() != 0)
  +     {
  +             return theEncoding;
  +     }
  +     else
  +     {
  +             return m_encoding;
  +     }
  +}
  +
  +
  +
   FormatterListener*
   StylesheetRoot::setupFormatterListener(
                        XSLTResultTarget&                               outputTarget,
  @@ -331,6 +353,8 @@
   
                const bool      doIndent = (indentAmount > -1) ? true : m_indentResult;
   
  +             const XalanDOMString&   theEncoding = getEncoding(outputTarget);
  +
                switch(m_outputMethod)
                {
                case FormatterListener::OUTPUT_METHOD_HTML:
  @@ -380,7 +404,7 @@
   
                                flistener = executionContext.createFormatterToHTML(
                                                                *pw,
  -                                                             m_encoding,
  +                                                             theEncoding,
                                                                m_mediatype,
                                                                m_doctypeSystem,
                                                                m_doctypePublic,
  @@ -392,7 +416,7 @@
                        break;
   
                case FormatterListener::OUTPUT_METHOD_TEXT:
  -                     flistener = executionContext.createFormatterToText(*pw, 
m_encoding);
  +                     flistener = executionContext.createFormatterToText(*pw, 
theEncoding);
                        break;
   
                case FormatterListener::OUTPUT_METHOD_NONE:
  @@ -406,7 +430,7 @@
                        }
   
                        flistener = executionContext.createFormatterToXML(
  -                                             *pw, m_version, doIndent, 
indentAmount, m_encoding, m_mediatype,
  +                                             *pw, m_version, doIndent, 
indentAmount, theEncoding, m_mediatype,
                                                m_doctypeSystem, m_doctypePublic, 
!m_omitxmlDecl, m_standalone);
                        break;
                }
  @@ -538,26 +562,30 @@
                }
                else 
if(equals(aname,Constants::ATTRNAME_OUTPUT_CDATA_SECTION_ELEMENTS))
                {
  -                     StringTokenizer theTokenizer(atts.getValue(i));
  +                     if (m_outputMethod == FormatterListener::OUTPUT_METHOD_NONE ||
  +                             m_outputMethod == FormatterListener::OUTPUT_METHOD_XML)
  +                     {
  +                             StringTokenizer theTokenizer(atts.getValue(i));
   
  -                     StringTokenizer::size_type      theTokenCount =
  -                             theTokenizer.countTokens();
  +                             StringTokenizer::size_type      theTokenCount =
  +                                     theTokenizer.countTokens();
   
  -                     m_cdataSectionElems.reserve(m_cdataSectionElems.size() + 
theTokenCount);
  +                             m_cdataSectionElems.reserve(m_cdataSectionElems.size() 
+ theTokenCount);
   
  -                     XalanDOMString  theToken;
  +                             XalanDOMString  theToken;
   
  -                     while(theTokenCount > 0)
  -                     {
  -                             theTokenizer.nextToken(theToken);
  +                             while(theTokenCount > 0)
  +                             {
  +                                     theTokenizer.nextToken(theToken);
   
  -                             --theTokenCount;
  +                                     --theTokenCount;
   
  -                             m_cdataSectionElems.push_back(
  -                                     constructionContext.createXalanQName(theToken, 
getNamespaces(), theLocator, true));
  -                     }
  +                                     m_cdataSectionElems.push_back(
  +                                             
constructionContext.createXalanQName(theToken, getNamespaces(), theLocator, true));
  +                             }
   
  -                     assert(theTokenizer.hasMoreTokens() == false);
  +                             assert(theTokenizer.hasMoreTokens() == false);
  +                     }
                }
                else
                {
  
  
  
  1.26      +12 -2     xml-xalan/c/src/XSLT/StylesheetRoot.hpp
  
  Index: StylesheetRoot.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetRoot.hpp,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- StylesheetRoot.hpp        25 Nov 2002 18:11:53 -0000      1.25
  +++ StylesheetRoot.hpp        11 Dec 2002 22:51:41 -0000      1.26
  @@ -125,8 +125,8 @@
        /**
         * Transform the source tree to the output in the given result tree target.
         *
  -      * @param inputSource  The input source tree
  -      * @param outputTarget The output source tree
  +      * @param inputSource  The input source
  +      * @param outputTarget The output result target
         * @param constructionContext context for construction of object
         */
        void
  @@ -434,6 +434,16 @@
                        const XalanText&                                textNode) 
const;
   
   private:
  +
  +     /**
  +      * Choose the encoding to use.
  +      *
  +      * @param outputTarget The output result target
  +      *
  +      * @return The chosen encoding
  +      */
  +     const XalanDOMString&
  +     getEncoding(const XSLTResultTarget&             outputTarget) const;
   
        /**
         * Create the default rule if needed.
  
  
  

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

Reply via email to