tng 2003/01/06 13:46:08 Modified: c/src/xercesc/util/Transcoders/Iconv390 Iconv390TransService.cpp Iconv390TransService.hpp Log: Since 390 uses ICU or Uniconv390 TransService, change Iconv390 to use intrinsic transcoders only so as to bypass Bug 2393. Revision Changes Path 1.4 +15 -109 xml-xerces/c/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp Index: Iconv390TransService.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Iconv390TransService.cpp 4 Nov 2002 15:14:33 -0000 1.3 +++ Iconv390TransService.cpp 6 Jan 2003 21:46:08 -0000 1.4 @@ -64,6 +64,7 @@ // --------------------------------------------------------------------------- #include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/util/XMLUni.hpp> +#include <xercesc/util/regx/XMLUniCharacter.hpp> #include "Iconv390TransService.hpp" #include <wchar.h> @@ -280,7 +281,13 @@ bool Iconv390TransService::isSpace(const XMLCh toCheck) const { - return (iswspace(toCheck) != 0); + unsigned short chartype = XMLUniCharacter::getType(toCheck); + if ( (chartype == XMLUniCharacter::SPACE_SEPARATOR) || + (chartype == XMLUniCharacter::LINE_SEPARATOR) || + (chartype == XMLUniCharacter::PARAGRAPH_SEPARATOR) ) + return true; + else + return false; } @@ -311,20 +318,13 @@ , XMLTransService::Codes& resValue , const unsigned int ) { + // This is a minimalist transcoding service, that only supports a local + // default transcoder. All named encodings return zero as a failure, + // which means that only the intrinsic encodings supported by the parser + // itself will work for XML data. // - // Translate the input encodingName from Unicode XMLCh format into - // ibm-037 char format via the lookup table. - // - char charEncodingName[256]; - const XMLCh* srcPtr = encodingName; - char* outPtr = charEncodingName; - while (*srcPtr != 0) - *outPtr++ = toupper(gUnicodeToIBM037XlatTable[*srcPtr++]); - *outPtr=0; - - iconvconverter *tconv=addConverter(charEncodingName,resValue); - - return new Iconv390Transcoder(tconv, encodingName, 0); + resValue = XMLTransService::UnsupportedEncoding; + return 0; } void Iconv390TransService::upperCase(XMLCh* const toUpperCase) const @@ -570,100 +570,6 @@ { removeConverter(converter); converter=0; -} - -// --------------------------------------------------------------------------- -// Iconv390Transcoder: Constructors and Destructor -// --------------------------------------------------------------------------- -Iconv390Transcoder::Iconv390Transcoder(const XMLCh* const encodingName - , const unsigned int blockSize) : - XMLTranscoder(encodingName, blockSize) -{ -} - -Iconv390Transcoder::Iconv390Transcoder(iconvconverter_t* const toAdopt - ,const XMLCh* const encodingName - ,const unsigned int blockSize) : - XMLTranscoder(encodingName, blockSize) - ,converter (toAdopt) -{ -} - -Iconv390Transcoder::~Iconv390Transcoder() -{ - removeConverter(converter); - converter=0; -} - - -// --------------------------------------------------------------------------- -// Iconv390Transcoder: Implementation of the virtual transcoder API -// --------------------------------------------------------------------------- -XMLCh Iconv390Transcoder::transcodeOne(const XMLByte* const srcData - , const unsigned int srcBytes - , unsigned int& bytesEaten) -{ - wchar_t toFill; - - size_t retCode; - char *tmpInPtr = (char*) srcData; - char *tmpOutPtr = (char*)&toFill; - size_t inByteLeft = srcBytes; - size_t outByteLeft = 2; - { - XMLMutexLock lockConverter(&converter->fMutex); - retCode = iconv(converter->fIconv390Descriptor, &tmpInPtr, &inByteLeft, &tmpOutPtr, &outByteLeft); - } - if (retCode == -1) { - bytesEaten = 0; - return 0; - } - int eaten = srcBytes-inByteLeft; - if (eaten == -1) - { - bytesEaten = 0; - return 0; - } - - // Return the bytes we ate and the resulting char. - bytesEaten = eaten; - return toFill; -} - - -unsigned int -Iconv390Transcoder::transcodeXML( const XMLByte* const srcData - , const unsigned int srcCount - , XMLCh* const toFill - , const unsigned int maxChars - , unsigned int& bytesEaten - , unsigned char* const charSizes) -{ - // - // For this one, because we have to maintain the offset table, we have - // to do them one char at a time until we run out of source data. - // - unsigned int countIn = 0; - unsigned int countOut = 0; - - size_t retCode; - char *tmpInPtr = (char *) srcData; - char *tmpOutPtr = (char *) toFill; - size_t inByteLeft = srcCount; - size_t outByteLeft = maxChars*2; - { - XMLMutexLock lockConverter(&converter->fMutex); - retCode = iconv(converter->fIconv390Descriptor, &tmpInPtr, &inByteLeft, &tmpOutPtr, &outByteLeft); - } - if (retCode == -1) - { - return 0; - } - - // Give back the counts of eaten and transcoded - bytesEaten = srcCount-inByteLeft; - return maxChars-outByteLeft/2; - } XERCES_CPP_NAMESPACE_END 1.4 +3 -44 xml-xerces/c/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp Index: Iconv390TransService.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Iconv390TransService.hpp 4 Nov 2002 15:14:33 -0000 1.3 +++ Iconv390TransService.hpp 6 Jan 2003 21:46:08 -0000 1.4 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/01/06 21:46:08 tng + * Since 390 uses ICU or Uniconv390 TransService, change Iconv390 to use intrinsic transcoders only so as to bypass Bug 2393. + * * Revision 1.3 2002/11/04 15:14:33 tng * C++ Namespace Support. * @@ -154,50 +157,6 @@ Iconv390TransService(const Iconv390TransService&); void operator=(const Iconv390TransService&); }; - -class XMLUTIL_EXPORT Iconv390Transcoder : public XMLTranscoder -{ -public : - // ----------------------------------------------------------------------- - // Constructors and Destructor - // ----------------------------------------------------------------------- - Iconv390Transcoder(const XMLCh* const encodingName, const unsigned int blockSize); - Iconv390Transcoder(iconvconverter_t* const toAdopt, - const XMLCh* const encodingName, const unsigned int blockSize); - ~Iconv390Transcoder(); - - - // ----------------------------------------------------------------------- - // Implementation of the virtual transcoder interface - // ----------------------------------------------------------------------- - virtual XMLCh transcodeOne - ( - const XMLByte* const srcData - , const unsigned int srcBytes - , unsigned int& bytesEaten - ); - - virtual unsigned int transcodeXML - ( - const XMLByte* const srcData - , const unsigned int srcCount - , XMLCh* const toFill - , const unsigned int maxChars - , unsigned int& bytesEaten - , unsigned char* const charSizes - ); - - -private : - // ----------------------------------------------------------------------- - // Unimplemented constructors and operators - // ----------------------------------------------------------------------- - Iconv390Transcoder(const Iconv390Transcoder&); - void operator=(const Iconv390Transcoder&); - iconvconverter_t *converter; -}; - - class XMLUTIL_EXPORT Iconv390LCPTranscoder : public XMLLCPTranscoder {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]