You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@locus.apache.org on 2000/10/07 17:25:37 UTC

cvs commit: xml-xalan/c/src/XMLSupport FormatterToText.cpp FormatterToText.hpp FormatterToXML.cpp FormatterToXML.hpp

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.