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.