dbertoni    00/10/07 08:25:37

  Modified:    c/src/XMLSupport FormatterToText.cpp FormatterToText.hpp
                        FormatterToXML.cpp FormatterToXML.hpp
  Log:
  Added transcoding support to FormatterToText. Moved some transcoding-related 
code from FormatterToXML to PlatformSupport/XalanTranscodingServices.
  
  Revision  Changes    Path
  1.10      +53 -10    xml-xalan/c/src/XMLSupport/FormatterToText.cpp
  
  Index: FormatterToText.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToText.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- FormatterToText.cpp       2000/10/04 17:51:17     1.9
  +++ FormatterToText.cpp       2000/10/07 15:25:33     1.10
  @@ -64,23 +64,65 @@
   
   
   #include <PlatformSupport/Writer.hpp>
  +#include <PlatformSupport/XalanOutputStream.hpp>
  +#include <PlatformSupport/XalanTranscodingServices.hpp>
   #if defined(XALAN_NEWLINE_IS_CRLF)
   #include <PlatformSupport/XalanUnicode.hpp>
   #endif
   
   
   
  -FormatterToText::FormatterToText(Writer&     pw) :
  +FormatterToText::FormatterToText(Writer&     writer) :
        FormatterListener(OUTPUT_METHOD_TEXT),
  -     m_pw(pw)
  +     m_writer(writer),
  +     m_maxCharacter(~0),
  +     m_encoding()
   {
   }
   
   
   
  +FormatterToText::FormatterToText(
  +                     Writer&                                 writer,
  +                     const XalanDOMString&   encoding) :
  +     FormatterListener(OUTPUT_METHOD_TEXT),
  +     m_writer(writer),
  +     m_maxCharacter(0),
  +     m_encoding(isEmpty(encoding) == false ? encoding : 
XalanDOMString(XalanTranscodingServices::s_utf8String))
  +{
  +     XalanOutputStream* const        theStream = m_writer.getStream();
  +
  +     if (theStream == 0)
  +     {
  +             // We're pretty much screwed here, since we can't transcode, so 
get the
  +             // maximum character for the local code page.
  +             m_maxCharacter = 
XalanTranscodingServices::getMaximumCharacterValue();
  +     }
  +     else
  +     {
  +             try
  +             {
  +                     theStream->setOutputEncoding(m_encoding);
  +             }
  +             catch(const XalanOutputStream::UnsupportedEncodingException&)
  +             {
  +                     const XalanDOMString    
theUTF8String(XalanTranscodingServices::s_utf8String);
  +
  +                     // Default to UTF-8 if the requested encoding is not 
supported...
  +                     theStream->setOutputEncoding(theUTF8String);
  +
  +                     m_encoding = theUTF8String;
  +             }
  +
  +             m_maxCharacter = 
XalanTranscodingServices::getMaximumCharacterValue(theStream->getOutputEncoding());
  +     }
  +}
  +
  +
  +
   FormatterToText::~FormatterToText()
   {
  -     m_pw.flush();
  +     m_writer.flush();
   }
   
   
  @@ -104,7 +146,7 @@
   void
   FormatterToText::endDocument()
   {
  -     m_pw.close();
  +     m_writer.close();
   }
   
   
  @@ -133,22 +175,23 @@
                        const XMLCh* const      chars,
                        const unsigned int      length)
   {
  -#if defined(XALAN_NEWLINE_IS_CRLF)
        for (unsigned int i = 0; i < length; ++i)
        {
  +#if defined(XALAN_NEWLINE_IS_CRLF)
                // Normalize LF to CR/LF...
                if (chars[i] == XalanUnicode::charLF &&
                        (i == 0 ||
                         chars[i - 1] != XalanUnicode::charCR))
  +             {
  +                     m_writer.write(XalanUnicode::charCR);
  +             }
  +#endif
  +             if (chars[i] > m_maxCharacter)
                {
  -                     m_pw.write(XalanUnicode::charCR);
                }
   
  -             m_pw.write(chars[i]);
  +             m_writer.write(chars[i]);
        }
  -#else
  -     m_pw.write(chars, 0, length);
  -#endif
   }
   
   
  
  
  
  1.6       +21 -3     xml-xalan/c/src/XMLSupport/FormatterToText.hpp
  
  Index: FormatterToText.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToText.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FormatterToText.hpp       2000/03/21 03:22:45     1.5
  +++ FormatterToText.hpp       2000/10/07 15:25:34     1.6
  @@ -64,6 +64,10 @@
   
   
   
  +#include <XalanDOM/XalanDOMString.hpp>
  +
  +
  +
   // Base class header file.
   #include <XMLSupport/FormatterListener.hpp>
   
  @@ -84,10 +88,20 @@
   
        /**
         * FormatterToText instance constructor.
  +      *
  +      * @param writer writer for output
  +      */
  +     FormatterToText(Writer&         writer);
  +
  +     /**
  +      * FormatterToText instance constructor.
         *
  -      * @param pw print writer for output
  +      * @param writer writer for output
  +      * @param encoding character encoding for the writer
         */
  -     FormatterToText(Writer&         pw);
  +     FormatterToText(
  +                     Writer&                                 writer,
  +                     const XalanDOMString&   encoding);
   
        virtual
        ~FormatterToText();
  @@ -148,8 +162,12 @@
                        const unsigned int      length);
   
   private:
  +
  +     Writer&                 m_writer;
  +
  +     XalanDOMChar    m_maxCharacter;
   
  -     Writer&         m_pw;
  +     XalanDOMString  m_encoding;
   
        // These are not implemented.
        FormatterToText(const FormatterToText&);
  
  
  
  1.32      +17 -128   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.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- FormatterToXML.cpp        2000/10/03 16:36:06     1.31
  +++ FormatterToXML.cpp        2000/10/07 15:25:34     1.32
  @@ -68,6 +68,7 @@
   
   #include <PlatformSupport/DOMStringHelper.hpp>
   #include <PlatformSupport/XalanOutputStream.hpp>
  +#include <PlatformSupport/XalanTranscodingServices.hpp>
   #include <PlatformSupport/Writer.hpp>
   
   
  @@ -134,6 +135,8 @@
        m_level(0),
        m_elemStack()
   {
  +     assert(isEmpty(m_encoding) == false);
  +
        if(isEmpty(m_doctypePublic) == false)
        {
                if(startsWith(
  @@ -144,33 +147,28 @@
                }
        }
   
  -     if (isEmpty(m_encoding) == false)
  -     {
  -             XalanOutputStream* const                theStream = 
m_writer.getStream();
  +     XalanOutputStream* const        theStream = m_writer.getStream();
   
  -             if (theStream != 0)
  +     if (theStream != 0)
  +     {
  +             try
                {
  -                     try
  -                     {
  -                             theStream->setOutputEncoding(m_encoding);
  -                     }
  -                     catch(const 
XalanOutputStream::UnsupportedEncodingException&)
  -                     {
  -                             // Default to UTF-8 if the requested encoding 
is not supported...
  -                             
theStream->setOutputEncoding(s_utf8EncodingString);
  +                     theStream->setOutputEncoding(m_encoding);
  +             }
  +             catch(const XalanOutputStream::UnsupportedEncodingException&)
  +             {
  +                     // Default to UTF-8 if the requested encoding is not 
supported...
  +                     
theStream->setOutputEncoding(XalanTranscodingServices::s_utf8String);
   
  -                             m_encoding = s_utf8EncodingString;
  -                     }
  +                     m_encoding = XalanTranscodingServices::s_utf8String;
                }
        }
   
  -     m_maxCharacter = getMaximumCharacterValue(m_encoding);
  +     m_maxCharacter = 
XalanTranscodingServices::getMaximumCharacterValue(m_encoding);
   
  -     m_isUTF8 = equals(m_encoding, s_utf8EncodingString);
  +     m_isUTF8 = XalanTranscodingServices::encodingIsUTF8(m_encoding);
   
  -     if (equals(m_encoding, s_windows1250EncodingString) == true ||
  -             equals(m_encoding, s_usASCIIEncodingString) == true ||
  -             equals(m_encoding, s_asciiEncodingString) == true)
  +     if (XalanTranscodingServices::getBytesEqualChars(m_encoding) == true)
        {
                m_bytesEqualChars = true;
   
  @@ -374,24 +372,6 @@
   
   
   
  -XalanDOMChar
  -FormatterToXML::getMaximumCharacterValue(const XalanDOMString&       
theEncoding)
  -{
  -     const MaximumCharacterValueMapType::const_iterator      i =
  -             s_maximumCharacterValues.find(toUpperCase(theEncoding));
  -
  -     if (i == s_maximumCharacterValues.end())
  -     {
  -             return XalanDOMChar(0x7fu);
  -     }
  -     else
  -     {
  -             return (*i).second;
  -     }
  -}
  -
  -
  -
   void
   FormatterToXML::accumDefaultEscape(
                        XalanDOMChar            ch,
  @@ -1562,18 +1542,8 @@
   
   static XalanDOMCharVectorType        s_xmlHeaderEndString;
   
  -static XalanDOMCharVectorType        s_windows1250EncodingString;
  -
  -static XalanDOMCharVectorType        s_usASCIIEncodingString;
  -
  -static XalanDOMCharVectorType        s_asciiEncodingString;
  -
  -static XalanDOMString                        s_utf8EncodingString;
   
  -static FormatterToXML::MaximumCharacterValueMapType          
s_maximumCharacterValues;
   
  -
  -
   const XalanDOMCharVectorType&        FormatterToXML::s_xsltNextIsRawString = 
::s_xsltNextIsRawString;
   
   const XalanDOMCharVectorType&        FormatterToXML::s_formatterToDOMString 
= ::s_formatterToDOMString;
  @@ -1596,68 +1566,10 @@
   
   const XalanDOMCharVectorType&        FormatterToXML::s_xmlHeaderEndString = 
::s_xmlHeaderEndString;
   
  -const XalanDOMCharVectorType&        
FormatterToXML::s_windows1250EncodingString = ::s_windows1250EncodingString;
  -
  -const XalanDOMCharVectorType&        FormatterToXML::s_usASCIIEncodingString 
= ::s_usASCIIEncodingString;
  -
  -const XalanDOMCharVectorType&        FormatterToXML::s_asciiEncodingString = 
::s_asciiEncodingString;
  -
  -const XalanDOMString&                        
FormatterToXML::s_utf8EncodingString = ::s_utf8EncodingString;
  -
   bool                                                 
FormatterToXML::s_javaEncodingIsISO = false; 
   
   const FormatterToXML::DOMCharBufferType::size_type   
FormatterToXML::s_maxBufferSize = 512;
   
  -const FormatterToXML::MaximumCharacterValueMapType&          
FormatterToXML::s_maximumCharacterValues =
  -                     ::s_maximumCharacterValues;
  -
  -
  -
  -static void
  -initMaximumCharacterValueMap(FormatterToXML::MaximumCharacterValueMapType&   
theMap)
  -{
  -     typedef FormatterToXML::MaximumCharacterValueMapType::value_type        
value_type;
  -
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("WINDOWS-1250")),
      0xFF)); // Windows 1250 Peter Smolik
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("UTF-8")),    
                 0xFFFF)); // Universal Transformation Format 8
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("US-ASCII")), 
         0x7F));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-1")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-2")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-3")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-4")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-5")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-6")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-7")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-8")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-8859-9")),
        0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-2022-JP")),
       0xFFFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("SHIFT_JIS")),
                 0xFFFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EUC-JP")),   
         0xFFFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("GB2312")),   
         0xFFFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("BIG5")),     
                 0xFFFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EUC-KR")),   
         0xFFFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("ISO-2022-KR")),
       0xFFFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("KOI8-R")),   
         0xFFFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-US")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-CA")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-NL")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-DK")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-NO")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-FI")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-SE")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-IT")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-ES")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-GB")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-FR")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-AR1")),
     0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-HE")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-CH")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-ROECE")),
 0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-YU")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-IS")),
      0xFF));
  -     
theMap.insert(value_type(XalanDOMString(XALAN_STATIC_UCODE_STRING("EBCDIC-CP-AR2")),
     0xFF));
  -}
  -
   
   
   void
  @@ -1695,19 +1607,6 @@
   
        ::s_xmlHeaderEndString =
                
MakeXalanDOMCharVector(c_wstr(XALAN_STATIC_UCODE_STRING("\"?>")));
  -
  -     ::s_windows1250EncodingString =
  -             
MakeXalanDOMCharVector(c_wstr(XALAN_STATIC_UCODE_STRING("WINDOWS-1250")));
  -
  -     ::s_usASCIIEncodingString =
  -             
MakeXalanDOMCharVector(c_wstr(XALAN_STATIC_UCODE_STRING("US-ASCII")));
  -
  -     ::s_asciiEncodingString =
  -             
MakeXalanDOMCharVector(c_wstr(XALAN_STATIC_UCODE_STRING("ASCII")));
  -
  -     ::s_utf8EncodingString = XALAN_STATIC_UCODE_STRING("UTF-8");
  -
  -     initMaximumCharacterValueMap(::s_maximumCharacterValues);
   }
   
   
  @@ -1736,14 +1635,4 @@
        XalanDOMCharVectorType().swap(::s_xmlHeaderStandaloneString);
   
        XalanDOMCharVectorType().swap(::s_xmlHeaderEndString);
  -
  -     XalanDOMCharVectorType().swap(::s_windows1250EncodingString);
  -
  -     XalanDOMCharVectorType().swap(::s_usASCIIEncodingString);
  -
  -     XalanDOMCharVectorType().swap(::s_asciiEncodingString);
  -
  -     clear(::s_utf8EncodingString);
  -
  -     MaximumCharacterValueMapType().swap(::s_maximumCharacterValues);
   }
  
  
  
  1.19      +0 -38     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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- FormatterToXML.hpp        2000/10/02 16:52:36     1.18
  +++ FormatterToXML.hpp        2000/10/07 15:25:34     1.19
  @@ -65,7 +65,6 @@
   
   
   
  -#include <map>
   #include <vector>
   
   
  @@ -329,15 +328,10 @@
        typedef vector<bool>                            BoolStackType;
        typedef vector<XalanDOMChar>            DOMCharBufferType;
        typedef vector<char>                            ByteBufferType;
  -     typedef map<XalanDOMString,
  -                             XalanDOMChar,
  -                             less<XalanDOMString> >  
MaximumCharacterValueMapType;
   #else
        typedef std::vector<bool>                       BoolStackType;
        typedef std::vector<XalanDOMChar>       DOMCharBufferType;
        typedef std::vector<char>                       ByteBufferType;
  -     typedef std::map<XalanDOMString,
  -                                      XalanDOMChar>          
MaximumCharacterValueMapType;
   #endif
   
   protected:
  @@ -529,16 +523,6 @@
                        XalanDOMChar    ch,
                        unsigned int    next);
   
  -     /**
  -      * Get the maximum character value for the encoding.
  -      *
  -      * @param theEncoding The encoding name.
  -      * @return The maximum character value that the
  -      * encoding supports.
  -      */
  -     static XalanDOMChar
  -     getMaximumCharacterValue(const XalanDOMString&  theEncoding);
  -
        enum eDummyTwo { SPECIALSSIZE = 256};
   
        /**
  @@ -795,27 +779,7 @@
         */
        static const XalanDOMCharVectorType&    s_defaultVersionString;
   
  -     /**
  -      * The string "WINDOWS-1250".
  -      */
  -     static const XalanDOMCharVectorType&    s_windows1250EncodingString;
  -
  -     /**
  -      * The string "US-ASCII".
  -      */
  -     static const XalanDOMCharVectorType&    s_usASCIIEncodingString;
   
  -     /**
  -      * The string "ASCII".
  -      */
  -     static const XalanDOMCharVectorType&    s_asciiEncodingString;
  -
  -     /**
  -      * The string "UTF-8".
  -      */
  -     static const XalanDOMString&    s_utf8EncodingString;
  -
  -
        DOMCharBufferType                               m_charBuf;
   
        DOMCharBufferType::size_type    m_pos;
  @@ -823,8 +787,6 @@
        ByteBufferType                                  m_byteBuf;
   
        static const DOMCharBufferType::size_type       s_maxBufferSize;
  -
  -     static const MaximumCharacterValueMapType&      
s_maximumCharacterValues;
   
        /**
         * Current level of indent.
  
  
  

Reply via email to