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...@apache.org on 2001/09/14 22:03:06 UTC
cvs commit: xml-xalan/c/src/PlatformSupport XalanToXercesTranscoderWrapper.cpp XalanToXercesTranscoderWrapper.hpp XalanTranscodingServices.hpp XalanUTF16Transcoder.cpp XalanUTF16Transcoder.hpp
dbertoni 01/09/14 13:03:06
Modified: c/src/PlatformSupport XalanToXercesTranscoderWrapper.cpp
XalanToXercesTranscoderWrapper.hpp
XalanTranscodingServices.hpp
XalanUTF16Transcoder.cpp XalanUTF16Transcoder.hpp
Log:
Added support for transcoding to UTF-16.
Revision Changes Path
1.3 +34 -0 xml-xalan/c/src/PlatformSupport/XalanToXercesTranscoderWrapper.cpp
Index: XalanToXercesTranscoderWrapper.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/PlatformSupport/XalanToXercesTranscoderWrapper.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XalanToXercesTranscoderWrapper.cpp 2000/10/04 18:40:34 1.2
+++ XalanToXercesTranscoderWrapper.cpp 2001/09/14 20:03:06 1.3
@@ -116,3 +116,37 @@
return theCode;
}
+
+
+
+XalanToXercesTranscoderWrapper::eCode
+XalanToXercesTranscoderWrapper::transcode(
+ const XalanXMLByte* theSourceData,
+ unsigned int theSourceCount,
+ XalanDOMChar* theTarget,
+ unsigned int theTargetSize,
+ unsigned int& theSourceCharsTranscoded,
+ unsigned int& theTargetBytesUsed,
+ unsigned char* theCharSizes)
+{
+ eCode theCode = XalanTranscodingServices::OK;
+
+ try
+ {
+ theTargetBytesUsed = m_transcoder->transcodeFrom(
+ theSourceData,
+ theSourceCount,
+ theTarget,
+ theTargetSize,
+ theSourceCharsTranscoded,
+ theCharSizes);
+ }
+ catch(const XMLException&)
+ {
+ theSourceCharsTranscoded = 0;
+ theTargetBytesUsed = 0;
+ theCode = XalanTranscodingServices::InternalFailure;
+ }
+
+ return theCode;
+}
1.2 +10 -0 xml-xalan/c/src/PlatformSupport/XalanToXercesTranscoderWrapper.hpp
Index: XalanToXercesTranscoderWrapper.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/PlatformSupport/XalanToXercesTranscoderWrapper.hpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XalanToXercesTranscoderWrapper.hpp 2000/09/27 16:24:12 1.1
+++ XalanToXercesTranscoderWrapper.hpp 2001/09/14 20:03:06 1.2
@@ -92,6 +92,16 @@
unsigned int& theSourceCharsTranscoded,
unsigned int& theTargetBytesUsed);
+ virtual eCode
+ transcode(
+ const XalanXMLByte* theSourceData,
+ unsigned int theSourceCount,
+ XalanDOMChar* theTarget,
+ unsigned int theTargetSize,
+ unsigned int& theSourceCharsTranscoded,
+ unsigned int& theTargetBytesUsed,
+ unsigned char* theCharSizes);
+
private:
// Not implemented...
1.5 +24 -0 xml-xalan/c/src/PlatformSupport/XalanTranscodingServices.hpp
Index: XalanTranscodingServices.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/PlatformSupport/XalanTranscodingServices.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XalanTranscodingServices.hpp 2001/02/09 01:37:22 1.4
+++ XalanTranscodingServices.hpp 2001/09/14 20:03:06 1.5
@@ -319,6 +319,30 @@
unsigned int& theSourceCharsTranscoded,
unsigned int& theTargetBytesUsed) = 0;
+ /**
+ * Transcode data from the transcoder's encoding to UTF-16. If successfull,
+ * theResult will be set to OK. If not, it will be set to one of the other
+ * codes.
+ *
+ * @param theSourceData The source data to transcode
+ * @param theSourceCount The length of the source data.
+ * @param theTarget The target array for storing the transcoded data.
+ * @param theTargetSize The number of characters that can be stored in the target.
+ * @param theSourceCharsTranscoded The count of the source characters that were transcoded.
+ * @param theTargetBytesUsed The number of characters stored in the target array
+ * @param theCharSizes For each character in theTarget, the number of characters consumed from theSourceData.
+ * @return The result code.
+ */
+ virtual eCode
+ transcode(
+ const XalanXMLByte* theSourceData,
+ unsigned int theSourceCount,
+ XalanDOMChar* theTarget,
+ unsigned int theTargetSize,
+ unsigned int& theSourceCharsTranscoded,
+ unsigned int& theTargetBytesUsed,
+ unsigned char* theCharSizes) = 0;
+
private:
// Not implemented...
1.3 +47 -0 xml-xalan/c/src/PlatformSupport/XalanUTF16Transcoder.cpp
Index: XalanUTF16Transcoder.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/PlatformSupport/XalanUTF16Transcoder.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XalanUTF16Transcoder.cpp 2001/01/08 18:15:07 1.2
+++ XalanUTF16Transcoder.cpp 2001/09/14 20:03:06 1.3
@@ -119,3 +119,50 @@
return XalanTranscodingServices::OK;
}
+
+
+
+XalanUTF16Transcoder::eCode
+XalanUTF16Transcoder::transcode(
+ const XalanXMLByte* theSourceData,
+ unsigned int theSourceCount,
+ XalanDOMChar* theTarget,
+ unsigned int theTargetSize,
+ unsigned int& theSourceCharsTranscoded,
+ unsigned int& theTargetBytesUsed,
+ unsigned char* theCharSizes)
+{
+ unsigned int theSourceEaten = 0;
+ unsigned int theTargetPosition = 0;
+
+ while(theSourceEaten < theSourceCount)
+ {
+ // Swap bytes to big endian...
+ if (theTargetPosition + 1 >= theTargetSize)
+ {
+ break;
+ }
+ else
+ {
+#if defined(XALAN_LITLE_ENDIAN)
+ const XalanXMLByte theLowByte = theSourceData[theSourceCount++];
+ const XalanXMLByte theHighByte = theSourceData[theSourceCount++];
+#elif defined(XALAN_BIG_ENDIAN)
+ const XalanXMLByte theHighByte = theSourceData[theSourceCount++];
+ const XalanXMLByte theLowByte = theSourceData[theSourceCount++];
+#else
+#error The platform must define the byte order!
+#endif
+
+ theTarget[theTargetPosition++] = XalanDOMChar((theHighByte << 8) | theLowByte);
+
+ *theCharSizes++ = 2;
+ }
+ }
+
+ theSourceCharsTranscoded = theSourceEaten;
+
+ theTargetBytesUsed = theTargetPosition;
+
+ return XalanTranscodingServices::OK;
+}
1.2 +23 -2 xml-xalan/c/src/PlatformSupport/XalanUTF16Transcoder.hpp
Index: XalanUTF16Transcoder.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/PlatformSupport/XalanUTF16Transcoder.hpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XalanUTF16Transcoder.hpp 2000/09/27 16:24:12 1.1
+++ XalanUTF16Transcoder.hpp 2001/09/14 20:03:06 1.2
@@ -80,8 +80,7 @@
~XalanUTF16Transcoder();
/**
- * Transcode data from UTF-16 to UTF-16. Used for the time being, because, on some
- * platforms, we store UTF-16 in 4-byte wchar_t.
+ * Transcode data from UTF-16 to UTF-16.
*
* @param theSourceData The source data to transcode
* @param theSourceCount The length of the source data.
@@ -100,6 +99,28 @@
unsigned int theTargetSize,
unsigned int& theSourceCharsTranscoded,
unsigned int& theTargetBytesUsed);
+
+ /**
+ * Transcode data from UTF-16 to UTF-16.
+ *
+ * @param theSourceData The source data to transcode
+ * @param theSourceCount The length of the source data.
+ * @param theResult The error code, if any.
+ * @param theTarget The target array for storing the transcoded data.
+ * @param theTargetSize The number of characters that can be stored in the target.
+ * @param theSourceCharsTranscoded The count of the source characters that were transcoded.
+ * @param theTargetBytesUsed The number of characters stored in the target array
+ * @return The result code.
+ */
+ virtual eCode
+ transcode(
+ const XalanXMLByte* theSourceData,
+ unsigned int theSourceCount,
+ XalanDOMChar* theTarget,
+ unsigned int theTargetSize,
+ unsigned int& theSourceCharsTranscoded,
+ unsigned int& theTargetBytesUsed,
+ unsigned char* theCharSizes);
private:
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org