uniconv390transservice.cpp

来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 1,475 行 · 第 1/4 页

CPP
1,475
字号
      XMLMutexLock lockcaser(&fCaseConverter->fcaseMutex);      if (fCaseConverter->ftoupperhand==UNICONV_NOHANDLE) {         fCaseConverter->ftoupperhand=uniconv_toupper_open();      }      unsigned int curCount = 0;      while ((fCaseConverter->ftoupperhand!=UNICONV_ERROR) && (*outPtr) ) {         XMLCh tmp = uniconv_caseit(fCaseConverter->ftoupperhand,*outPtr);         if (errno) {            uniconv_toupper_close(fCaseConverter->ftoupperhand);            fCaseConverter->ftoupperhand=UNICONV_ERROR;            break;         }         *outPtr = tmp;         outPtr++;      }   }   if (fCaseConverter->ftoupperhand==UNICONV_ERROR) {     return fICUService->upperCase(toUpperCase);   }}void Uniconv390TransService::lowerCase(XMLCh* const toLowerCase) const{//char localname1[500];//XMLString::transcode(toLowerCase,localname1,400);//DBGPRINTF2("lower casing %s \n",localname1);//printf("tolower handle=%x\n",fCaseConverter->ftolowerhand);//printf("!!!***Lower casing function called: %s \n",localname1);   if (fCaseConverter->ftolowerhand!=UNICONV_ERROR) {      XMLCh* outPtr = toLowerCase;      XMLMutexLock lockcaser(&fCaseConverter->fcaseMutex);      if (fCaseConverter->ftolowerhand==UNICONV_NOHANDLE) {         fCaseConverter->ftolowerhand=uniconv_tolower_open();      }      unsigned int curCount = 0;      while ((fCaseConverter->ftolowerhand!=UNICONV_ERROR) && (*outPtr) ) {         XMLCh tmp = uniconv_caseit(fCaseConverter->ftolowerhand,*outPtr);         if (errno) {            uniconv_tolower_close(fCaseConverter->ftolowerhand);            fCaseConverter->ftolowerhand=UNICONV_ERROR;            break;         }         *outPtr = tmp;         outPtr++;      }   }   if (fCaseConverter->ftolowerhand==UNICONV_ERROR) {     return fICUService->lowerCase(toLowerCase);   }}XMLLCPTranscoder* Uniconv390TransService::makeNewLCPTranscoder(){   XMLTransService::Codes resValue;DBGPRINTF2("makeNewLCPTranscoder() localencoding=%s \n",nl_langinfo(CODESET));   // USS default code page is IBM-1047   if (gForceTranscode == MUST_USE_ICU) {      if (gViewTranscoder)         printf("IXM1004I LCP - Using ICU - %s\n",nl_langinfo(CODESET));      fLCPTranscoder = fICUService->makeNewLCPTranscoder();   } else {      char codepage[32];      sprintf(codepage,"%s-s390", nl_langinfo(CODESET));      uniconvconverter *tconv=addConverter(codepage,resValue);      DBGPRINTF3("gForce=%d,tconv=%x\n",gForceTranscode,(int)tconv);      if (tconv) {         if (gViewTranscoder)            printf("IXM1005I LCP - Using Unicode Services - %s\n",nl_langinfo(CODESET));         fLCPTranscoder = new Uniconv390LCPTranscoder(tconv);      } else {         if (gForceTranscode != MUST_USE_UNICONV) {            if (gViewTranscoder)               printf("IXM1006I LCP - Using ICU - %s\n",nl_langinfo(CODESET));            fLCPTranscoder = fICUService->makeNewLCPTranscoder();         }      }   }   return fLCPTranscoder;}// ---------------------------------------------------------------------------//  Uniconv390TransService: The protected virtual transcoding service API// ---------------------------------------------------------------------------XMLTranscoder* Uniconv390TransService::makeNewXMLTranscoder(const  XMLCh* const            encodingName                    ,       XMLTransService::Codes& resValue                    , const unsigned int            blockSize                    ,       MemoryManager* const    manager){char * localname = XMLString::transcode(encodingName, manager);ArrayJanitor<char> janText((char*)localname, manager);DBGPRINTF3("makeNewXMLTranscoder() encoding=%s blocksize=%d\n",localname,blockSize);   if (gForceTranscode == MUST_USE_ICU) {      if (gViewTranscoder)         printf("IXM1001I XML - Using ICU - %s\n",localname);      return fICUService->makeNewXMLTranscoder(encodingName,resValue,blockSize, manager);   }   uniconvconverter *tconv=addConverter(localname,resValue);   if (tconv == 0) {      DBGPRINTF1("uniconv failed!!!!!!!!\n");      if (gForceTranscode == MUST_USE_UNICONV)         return 0;      else {         if (gViewTranscoder)            printf("IXM1002I XML - Using ICU - %s\n",localname);         return fICUService->makeNewXMLTranscoder(encodingName,resValue,blockSize, manager);      }   }   if (gViewTranscoder)      printf("IXM1003I XML - Using Unicode Services - %s\n",localname);   return new (manager) Uniconv390Transcoder(encodingName, tconv, blockSize, manager);}// ---------------------------------------------------------------------------//  Uniconv390TransService: Hidden Init Method////  This is called by OS390 platform utils during startup.// ---------------------------------------------------------------------------void Uniconv390TransService::initTransService(){    // Need to first check if the translate instruction is supported    // by this processor ... if it is use the new intrinsics.    if (((*(int*) 200) & 0x00001000) != 0)       {       //       //  A stupid way to increment the fCurCount inside the RefVectorOf       //       for (unsigned int i = 0; i < XMLRecognizer::Encodings_Count; i++)           gMappingsRecognizer->addElement(0);       //       //  Add in the magical mapping for the native XMLCh transcoder. This       //  is used for internal entities.       //       gMappingsRecognizer->setElementAt(new ENameMapFor<XMLChTranscoder>(XMLUni::fgXMLChEncodingString), XMLRecognizer::XERCES_XMLCH);       gMappings->put((void*)XMLUni::fgXMLChEncodingString, new ENameMapFor<XMLChTranscoder>(XMLUni::fgXMLChEncodingString));       //       //  Add in our mappings for ASCII.       //       gMappingsRecognizer->setElementAt(new ENameMapFor<XMLASCIITranscoder390>(XMLUni::fgUSASCIIEncodingString), XMLRecognizer::US_ASCII);       gMappings->put((void*)XMLUni::fgUSASCIIEncodingString, new ENameMapFor<XMLASCIITranscoder390>(XMLUni::fgUSASCIIEncodingString));       gMappings->put((void*)XMLUni::fgUSASCIIEncodingString2, new ENameMapFor<XMLASCIITranscoder390>(XMLUni::fgUSASCIIEncodingString2));       gMappings->put((void*)XMLUni::fgUSASCIIEncodingString3, new ENameMapFor<XMLASCIITranscoder390>(XMLUni::fgUSASCIIEncodingString3));       gMappings->put((void*)XMLUni::fgUSASCIIEncodingString4, new ENameMapFor<XMLASCIITranscoder390>(XMLUni::fgUSASCIIEncodingString4));       //       //  Add in our mappings for UTF-8       //       gMappingsRecognizer->setElementAt(new ENameMapFor<XMLUTF8Transcoder390>(XMLUni::fgUTF8EncodingString), XMLRecognizer::UTF_8);       gMappings->put((void*)XMLUni::fgUTF8EncodingString, new ENameMapFor<XMLUTF8Transcoder390>(XMLUni::fgUTF8EncodingString));       gMappings->put((void*)XMLUni::fgUTF8EncodingString2, new ENameMapFor<XMLUTF8Transcoder390>(XMLUni::fgUTF8EncodingString2));       //       //  Add in our mappings for Latin1       //       gMappings->put((void*)XMLUni::fgISO88591EncodingString, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString));       gMappings->put((void*)XMLUni::fgISO88591EncodingString2, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString2));       gMappings->put((void*)XMLUni::fgISO88591EncodingString3, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString3));       gMappings->put((void*)XMLUni::fgISO88591EncodingString4, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString4));       gMappings->put((void*)XMLUni::fgISO88591EncodingString5, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString5));       gMappings->put((void*)XMLUni::fgISO88591EncodingString6, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString6));       gMappings->put((void*)XMLUni::fgISO88591EncodingString7, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString7));       gMappings->put((void*)XMLUni::fgISO88591EncodingString8, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString8));       gMappings->put((void*)XMLUni::fgISO88591EncodingString9, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString9));       gMappings->put((void*)XMLUni::fgISO88591EncodingString10, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString10));       gMappings->put((void*)XMLUni::fgISO88591EncodingString11, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString11));       gMappings->put((void*)XMLUni::fgISO88591EncodingString12, new ENameMapFor<XML88591Transcoder390>(XMLUni::fgISO88591EncodingString12));       //       //  Add in our mappings for UTF-16 and UCS-4, little endian       //       bool swapped = false;       #if defined(ENDIANMODE_BIG)       swapped = true;       #endif       gMappingsRecognizer->setElementAt(new EEndianNameMapFor<XMLUTF16Transcoder>(XMLUni::fgUTF16LEncodingString, swapped), XMLRecognizer::UTF_16L);       gMappings->put       (   		(void*)XMLUni::fgUTF16LEncodingString,           new EEndianNameMapFor<XMLUTF16Transcoder>           (               XMLUni::fgUTF16LEncodingString               , swapped           )       );       gMappings->put       (   		(void*)XMLUni::fgUTF16LEncodingString2,           new EEndianNameMapFor<XMLUTF16Transcoder>           (               XMLUni::fgUTF16LEncodingString2               , swapped           )       );       gMappingsRecognizer->setElementAt(new EEndianNameMapFor<XMLUCS4Transcoder>(XMLUni::fgUCS4LEncodingString, swapped), XMLRecognizer::UCS_4L);       gMappings->put       (   		(void*)XMLUni::fgUCS4LEncodingString,           new EEndianNameMapFor<XMLUCS4Transcoder>           (               XMLUni::fgUCS4LEncodingString               , swapped           )       );       gMappings->put       (   		(void*)XMLUni::fgUCS4LEncodingString2,           new EEndianNameMapFor<XMLUCS4Transcoder>           (               XMLUni::fgUCS4LEncodingString2               , swapped           )       );       //       //  Add in our mappings for UTF-16 and UCS-4, big endian       //       swapped = false;       #if defined(ENDIANMODE_LITTLE)       swapped = true;       #endif       gMappingsRecognizer->setElementAt(new EEndianNameMapFor<XMLUTF16Transcoder>(XMLUni::fgUTF16BEncodingString, swapped), XMLRecognizer::UTF_16B);       gMappings->put       (   		(void*)XMLUni::fgUTF16BEncodingString,           new EEndianNameMapFor<XMLUTF16Transcoder>           (               XMLUni::fgUTF16BEncodingString               , swapped           )       );       gMappings->put       (   		(void*)XMLUni::fgUTF16BEncodingString2,           new EEndianNameMapFor<XMLUTF16Transcoder>           (               XMLUni::fgUTF16BEncodingString2               , swapped           )       );       gMappingsRecognizer->setElementAt(new EEndianNameMapFor<XMLUCS4Transcoder>(XMLUni::fgUCS4BEncodingString, swapped), XMLRecognizer::UCS_4B);       gMappings->put       (   		(void*)XMLUni::fgUCS4BEncodingString,           new EEndianNameMapFor<XMLUCS4Transcoder>           (               XMLUni::fgUCS4BEncodingString               , swapped           )       );       gMappings->put       (   		(void*)XMLUni::fgUCS4BEncodingString2,           new EEndianNameMapFor<XMLUCS4Transcoder>           (               XMLUni::fgUCS4BEncodingString2               , swapped           )       );       //       //  Add in our mappings for UTF-16 and UCS-4 which does not indicate endian       //  assumes the same endian encoding as the OS       //       gMappings->put       (   		(void*)XMLUni::fgUTF16EncodingString,           new EEndianNameMapFor<XMLUTF16Transcoder>           (               XMLUni::fgUTF16EncodingString               , false           )       );       gMappings->put       (   		(void*)XMLUni::fgUTF16EncodingString2,           new EEndianNameMapFor<XMLUTF16Transcoder>           (               XMLUni::fgUTF16EncodingString2               , false           )       );       gMappings->put       (   		(void*)XMLUni::fgUTF16EncodingString3,           new EEndianNameMapFor<XMLUTF16Transcoder>           (               XMLUni::fgUTF16EncodingString3               , false           )       );       gMappings->put       (   		(void*)XMLUni::fgUTF16EncodingString4,           new EEndianNameMapFor<XMLUTF16Transcoder>           (               XMLUni::fgUTF16EncodingString4               , false           )       );       gMappings->put       (   		(void*)XMLUni::fgUCS4EncodingString,           new EEndianNameMapFor<XMLUCS4Transcoder>           (               XMLUni::fgUCS4EncodingString               , false           )       );       gMappings->put       (   		(void*)XMLUni::fgUCS4EncodingString2,           new EEndianNameMapFor<XMLUCS4Transcoder>           (               XMLUni::fgUCS4EncodingString2               , false           )       );       gMappings->put       (   		(void*)XMLUni::fgUCS4EncodingString3,           new EEndianNameMapFor<XMLUCS4Transcoder>           (               XMLUni::fgUCS4EncodingString3               , false           )       );       //       //  Add in our mappings for IBM037, and the one alias we support for       //  it, which is EBCDIC-CP-US.       //       gMappingsRecognizer->setElementAt(new ENameMapFor<XMLEBCDICTranscoder390>(XMLUni::fgEBCDICEncodingString), XMLRecognizer::EBCDIC);       gMappings->put((void*)XMLUni::fgIBM037EncodingString, new ENameMapFor<XMLEBCDICTranscoder390>(XMLUni::fgIBM037EncodingString));       gMappings->put((void*)XMLUni::fgIBM037EncodingString2, new ENameMapFor<XMLEBCDICTranscoder390>(XMLUni::fgIBM037EncodingString2));       //hhe       gMappings->put((void*)XMLUni::fgIBM1047EncodingString, new ENameMapFor<XMLIBM1047Transcoder390>(XMLUni::fgIBM1047EncodingString));       gMappings->put((void*)XMLUni::fgIBM1047EncodingString2, new ENameMapFor<XMLIBM1047Transcoder390>(XMLUni::fgIBM1047EncodingString2));       //       //  Add in our mappings for IBM037 with Euro update, i.e. IBM1140. It       //  has alias IBM01140, the one suggested by IANA       //       gMappings->put((void*)XMLUni::fgIBM1140EncodingString, new ENameMapFor<XMLIBM1140Transcoder390>(XMLUni::fgIBM1140EncodingString));       gMappings->put((void*)XMLUni::fgIBM1140EncodingString2, new ENameMapFor<XMLIBM1140Transcoder390>(XMLUni::fgIBM1140EncodingString2));       gMappings->put((void*)XMLUni::fgIBM1140EncodingString3, new ENameMapFor<XMLIBM1140Transcoder390>(XMLUni::fgIBM1140EncodingString3));

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?