亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? iconvgnutransservice.cpp

?? IBM的解析xml的工具Xerces的源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/* * Copyright 2002,2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Log: IconvGNUTransService.cpp,v $ * Revision 1.15  2004/09/08 13:56:45  peiyongz * Apache License Version 2.0 * * Revision 1.14  2004/07/23 15:29:09  amassari * transcode was badly terminating the converted string (jira#1206) * * Revision 1.13  2004/07/23 14:35:03  amassari * A global mutex was not cleaned up * * Revision 1.12  2004/02/25 14:53:24  peiyongz * Bug#27209: Xerces 2.5.0 does not build with option -t IconvGNU because of syntax errors! * * Revision 1.11  2003/12/24 15:24:15  cargilld * More updates to memory management so that the static memory manager. * * Revision 1.10  2003/08/19 14:01:41  neilg * fix for bug 22537 * * Revision 1.9  2003/05/17 16:32:18  knoaman * Memory manager implementation : transcoder update. * * Revision 1.8  2003/05/16 21:37:00  knoaman * Memory manager implementation: Modify constructors to pass in the memory manager. * * Revision 1.7  2003/05/15 18:47:05  knoaman * Partial implementation of the configurable memory manager. * * Revision 1.6  2003/04/07 16:52:13  peiyongz * Bug# 18672: IconvGNUTranscoder can't be build when namespaces is on. *                       Patch from Bacek@yandex-team.ru (Vasily Tchekalkin) * * Revision 1.5  2003/03/09 17:03:25  peiyongz * PanicHandler * * Revision 1.4  2002/12/31 18:42:54  tng * [Bug 15608] IconvLCPTranscoder::transcode() is wrong at wcstombs() usage. * * Revision 1.3  2002/11/04 15:14:34  tng * C++ Namespace Support. * * Revision 1.2  2002/09/27 13:33:43  tng * [Bug 12547] Xerces C++ 2.1 fails to build on Linux 64 bits arch with -tlinux.  Patch from Guillaume Morin. * * Revision 1.1  2002/08/19 19:38:18  tng * [Bug 11771] Linux specific IconvGNU transcoder.  Patch from Vasily Tchekalkin. * */// ---------------------------------------------------------------------------//  Includes// ---------------------------------------------------------------------------#include <ctype.h>#include <locale.h>#include <iconv.h>#include <errno.h>#include <endian.h>#include <xercesc/util/XMLString.hpp>#include <xercesc/util/XMLUniDefs.hpp>#include <xercesc/util/XMLUni.hpp>#include <xercesc/util/PlatformUtils.hpp>#include <xercesc/util/TranscodingException.hpp>#include "IconvGNUTransService.hpp"#if !defined(APP_NO_THREADS)#include <xercesc/util/Mutexes.hpp>#include <xercesc/util/XMLRegisterCleanup.hpp>#endif /* !APP_NO_THREADS */XERCES_CPP_NAMESPACE_BEGIN#if !defined(APP_NO_THREADS)// Iconv() access syncronization pointstatic XMLMutex    *gIconvMutex = NULL;static XMLRegisterCleanup IconvGNUMutexCleanup;#  define ICONV_LOCK    XMLMutexLock lockConverter(gIconvMutex);#else /* APP_NO_THREADS */# define ICONV_LOCK#endif /* !APP_NO_THREADS */// ---------------------------------------------------------------------------// Description of encoding schemas, supported by iconv()// ---------------------------------------------------------------------------typedef struct __IconvGNUEncoding {    const char*    fSchema;    // schema name    size_t    fUChSize;    // size of the character    unsigned int fUBO;        // byte order, relative to the host} IconvGNUEncoding;static const IconvGNUEncoding    gIconvGNUEncodings[] = {    { "UCS-2LE",        2,    LITTLE_ENDIAN },    { "ucs-2-internal",        2,    LITTLE_ENDIAN },    { NULL, 0,    0 }};//--------------------------------------------------// Macro-definitions to translate "native unicode"// characters <-> XMLCh with different host byte order// and encoding schemas.# if BYTE_ORDER == LITTLE_ENDIAN#  define IXMLCh2WC16(x,w)            \    *(w) = ((*(x)) >> 8) & 0xFF;        \    *((w)+1) = (*(x)) & 0xFF#  define IWC162XMLCh(w,x)    *(x) = ((*(w)) << 8) | (*((w)+1))#  define XMLCh2WC16(x,w)            \    *(w) = (*(x)) & 0xFF;            \    *((w)+1) = ((*(x)) >> 8) & 0xFF#  define WC162XMLCh(w,x)    *(x) = ((*((w)+1)) << 8) | (*(w))#  define IXMLCh2WC32(x,w)            \    *(w) = ((*(x)) >> 24) & 0xFF;        \    *((w)+1) = ((*(x)) >> 16) & 0xFF;    \    *((w)+2) = ((*(x)) >> 8) & 0xFF;    \    *((w)+3) = (*(x)) & 0xFF#  define IWC322XMLCh(w,x)                \      *(x) = ((*(w)) << 24) | ((*((w)+1)) << 16) |    \          ((*((w)+2)) << 8) | (*((w)+3))#  define XMLCh2WC32(x,w)            \    *((w)+3) = ((*(x)) >> 24) & 0xFF;    \    *((w)+2) = ((*(x)) >> 16) & 0xFF;    \    *((w)+1) = ((*(x)) >> 8) & 0xFF;    \    *(w) = (*(x)) & 0xFF#  define WC322XMLCh(w,x)                    \      *(x) = ((*((w)+3)) << 24) | ((*((w)+2)) << 16) |    \        ((*((w)+1)) << 8) | (*(w))# else /* BYTE_ORDER != LITTLE_ENDIAN */#  define XMLCh2WC16(x,w)            \    *(w) = ((*(x)) >> 8) & 0xFF;        \    *((w)+1) = (*(x)) & 0xFF#  define WC162XMLCh(w,x)    *(x) = ((*(w)) << 8) | (*((w)+1))#  define IXMLCh2WC16(x,w)            \    *(w) = (*(x)) & 0xFF;            \    *((w)+1) = ((*(x)) >> 8) & 0xFF#  define IWC162XMLCh(w,x)    *(x) = ((*((w)+1)) << 8) | (*(w))#  define XMLCh2WC32(x,w)            \    *(w) = ((*(x)) >> 24) & 0xFF;        \    *((w)+1) = ((*(x)) >> 16) & 0xFF;    \    *((w)+2) = ((*(x)) >> 8) & 0xFF;    \    *((w)+3) = (*(x)) & 0xFF#  define WC322XMLCh(w,x)                \      *(x) = ((*(w)) << 24) | ((*((w)+1)) << 16) |    \          ((*((w)+2)) << 8) | (*((w)+3))#  define IXMLCh2WC32(x,w)            \    *((w)+3) = ((*(x)) >> 24) & 0xFF;    \    *((w)+2) = ((*(x)) >> 16) & 0xFF;    \    *((w)+1) = ((*(x)) >> 8) & 0xFF;    \    *(w) = (*(x)) & 0xFF#  define IWC322XMLCh(w,x)                    \      *(x) = ((*((w)+3)) << 24) | ((*((w)+2)) << 16) |    \        ((*((w)+1)) << 8) | (*(w))# endif /* BYTE_ORDER == LITTLE_ENDIAN */#include <wchar.h>#include <string.h>#include <stdlib.h>#include <stdio.h>// ---------------------------------------------------------------------------//  Local, const data// ---------------------------------------------------------------------------static const unsigned int    gTempBuffArraySize = 4096;static const XMLCh        gMyServiceId[] ={    chLatin_I, chLatin_C, chLatin_o, chLatin_n, chLatin_v, chNull};// ---------------------------------------------------------------------------//  Local methods// ---------------------------------------------------------------------------static unsigned int getWideCharLength(const XMLCh* const src){    if (!src)        return 0;    unsigned int len = 0;    const XMLCh* pTmp = src;    while (*pTmp++)        len++;    return len;}//----------------------------------------------------------------------------// There is implementation of the libiconv for FreeBSD (available through the// ports collection). The following is a wrapper around the iconv().//----------------------------------------------------------------------------IconvGNUWrapper::IconvGNUWrapper ()    : fUChSize(0), fUBO(LITTLE_ENDIAN),      fCDTo((iconv_t)-1), fCDFrom((iconv_t)-1){}IconvGNUWrapper::IconvGNUWrapper ( iconv_t    cd_from,               iconv_t    cd_to,               size_t    uchsize,               unsigned int    ubo )    : fUChSize(uchsize), fUBO(ubo),      fCDTo(cd_to), fCDFrom(cd_from){    if (fCDFrom == (iconv_t) -1 || fCDTo == (iconv_t) -1) {    XMLPlatformUtils::panic (PanicHandler::Panic_NoTransService);    }}IconvGNUWrapper::~IconvGNUWrapper(){}// Convert "native unicode" character into XMLChvoid    IconvGNUWrapper::mbcToXMLCh (const char *mbc, XMLCh *toRet) const{    if (fUBO == LITTLE_ENDIAN) {        if (fUChSize == sizeof(XMLCh))            *toRet = *((XMLCh*) mbc);        else if (fUChSize == 2) {            WC162XMLCh( mbc, toRet );        } else {            WC322XMLCh( mbc, toRet );        }    } else {        if (fUChSize == 2) {            IWC162XMLCh( mbc, toRet );        } else {            IWC322XMLCh( mbc, toRet );        }    }}// Convert XMLCh into "native unicode" charactervoid    IconvGNUWrapper::xmlChToMbc (XMLCh xch, char *mbc) const{    if (fUBO == LITTLE_ENDIAN) {        if (fUChSize == sizeof(XMLCh)) {            memcpy (mbc, &xch, fUChSize);            return;        }        if (fUChSize == 2) {            XMLCh2WC16( &xch, mbc );        } else {            XMLCh2WC32( &xch, mbc );        }    } else {        if (fUChSize == 2) {            IXMLCh2WC16( &xch, mbc );        } else {            IXMLCh2WC32( &xch, mbc );        }    }}// Return uppercase equivalent for XMLChXMLCh    IconvGNUWrapper::toUpper (const XMLCh ch) const{    if (ch <= 0x7F)        return toupper(ch);    char    wcbuf[fUChSize * 2];    xmlChToMbc (ch, wcbuf);    char    tmpArr[4];    char*    ptr = wcbuf;    size_t    len = fUChSize;    char    *pTmpArr = tmpArr;    size_t    bLen = 2;    ICONV_LOCK;    if (::iconv (fCDTo, &ptr, &len,         &pTmpArr, &bLen) == (size_t) -1)    return 0;    tmpArr[1] = toupper (*((unsigned char *)tmpArr));    *tmpArr = tmpArr[1];    len = 1;    pTmpArr = wcbuf;    bLen = fUChSize;    ptr = tmpArr;    if (::iconv (fCDFrom, &ptr, &len,         &pTmpArr, &bLen) == (size_t) -1)    return 0;    mbcToXMLCh (wcbuf, (XMLCh*) &ch);    return ch;}// Return lowercase equivalent for XMLChXMLCh    IconvGNUWrapper::toLower (const XMLCh ch) const{    if (ch <= 0x7F)        return tolower(ch);    char    wcbuf[fUChSize * 2];    xmlChToMbc (ch, wcbuf);    char    tmpArr[4];    char*    ptr = wcbuf;    size_t    len = fUChSize;    char    *pTmpArr = tmpArr;    size_t    bLen = 2;    ICONV_LOCK;    if (::iconv (fCDTo, &ptr, &len,         &pTmpArr, &bLen) == (size_t) -1)    return 0;    tmpArr[1] = tolower (*((unsigned char*)tmpArr));    *tmpArr = tmpArr[1];    len = 1;    pTmpArr = wcbuf;    bLen = fUChSize;    ptr = tmpArr;    if (::iconv (fCDFrom, &ptr, &len,         &pTmpArr, &bLen) == (size_t) -1)    return 0;    mbcToXMLCh (wcbuf, (XMLCh*) &ch);    return ch;}// Check if passed characters belongs to the :space: classbool    IconvGNUWrapper::isSpace(const XMLCh toCheck) const{    if (toCheck <= 0x7F)        return isspace(toCheck);    char    wcbuf[fUChSize * 2];    char    tmpArr[4];    xmlChToMbc (toCheck, wcbuf);    char*    ptr = wcbuf;    size_t    len = fUChSize;    char    *pTmpArr = tmpArr;    size_t    bLen = 2;    {        ICONV_LOCK;        if (::iconv (fCDTo, &ptr, &len,                 &pTmpArr, &bLen) == (size_t) -1)            return 0;    }    return isspace(*tmpArr);}// Fill array of XMLCh characters with data, supplyed in the array// of "native unicode" characters.XMLCh*    IconvGNUWrapper::mbsToXML(    const char*        mbs_str    ,      size_t    mbs_cnt    ,      XMLCh*    xml_str    ,      size_t    xml_cnt) const{    if (mbs_str == NULL || mbs_cnt == 0 || xml_str == NULL || xml_cnt == 0)        return NULL;    size_t    cnt = (mbs_cnt < xml_cnt) ? mbs_cnt : xml_cnt;    if (fUBO == LITTLE_ENDIAN) {        if (fUChSize == sizeof(XMLCh)) {            // null-transformation            memcpy (xml_str, mbs_str, fUChSize * cnt);            return xml_str;        }        if (fUChSize == 2)            for (size_t i = 0; i < cnt; i++, mbs_str += fUChSize) {                WC162XMLCh( mbs_str, xml_str + i);            }        else            for (size_t i = 0; i < cnt; i++, mbs_str += fUChSize) {                WC322XMLCh( mbs_str, xml_str + i );            }    } else {        if (fUChSize == 2)            for (size_t i = 0; i < cnt; i++, mbs_str += fUChSize) {                IWC162XMLCh( mbs_str, xml_str + i );            }        else            for (size_t i = 0; i < cnt; i++, mbs_str += fUChSize) {                IWC322XMLCh( mbs_str, xml_str + i );            }    }    return xml_str;}// Fill array of "native unicode" characters with data, supplyed// in the array of XMLCh characters.char*    IconvGNUWrapper::xmlToMbs(    const XMLCh*    xml_str    ,      size_t    xml_cnt    ,      char*        mbs_str    ,      size_t    mbs_cnt) const{    if (mbs_str == NULL || mbs_cnt == 0 || xml_str == NULL || xml_cnt == 0)        return NULL;    size_t    cnt = (mbs_cnt < xml_cnt) ? mbs_cnt : xml_cnt;    char    *toReturn = mbs_str;    if (fUBO == LITTLE_ENDIAN) {        if (fUChSize == sizeof(XMLCh)) {            // null-transformation            memcpy (mbs_str, xml_str, fUChSize * cnt);            return toReturn;        }        if (fUChSize == 2)            for (size_t i = 0; i < cnt; i++, mbs_str += fUChSize, xml_str++) {                XMLCh2WC16( xml_str, mbs_str );            }        else            for (size_t i = 0; i < cnt; i++, mbs_str += fUChSize, xml_str++) {                XMLCh2WC32( xml_str, mbs_str );            }    } else {        if (fUChSize == 2)            for (size_t i = 0; i < cnt; i++, mbs_str += fUChSize, xml_str++) {                IXMLCh2WC16( xml_str, mbs_str );            }        else            for (size_t i = 0; i < cnt; i++, mbs_str += fUChSize, xml_str++) {                IXMLCh2WC32( xml_str, mbs_str );            }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜视频在线观看一区二区| 亚洲一区在线看| 色综合天天综合| 美女视频第一区二区三区免费观看网站 | 日本韩国欧美一区| 日本强好片久久久久久aaa| 国产精品成人免费| 日韩一区国产二区欧美三区| 成人av小说网| 国产精品18久久久久久久网站| 亚洲免费观看高清完整版在线观看熊| 精品久久国产老人久久综合| 91蜜桃网址入口| 激情综合色播激情啊| 婷婷开心久久网| 国产精品久久毛片| 久久精品亚洲乱码伦伦中文| 在线视频综合导航| 成人国产电影网| 免费成人在线视频观看| 自拍偷自拍亚洲精品播放| 久久久久久电影| 欧美电影影音先锋| 国产农村妇女精品| 国产一区二区三区视频在线播放| 精品三级在线看| 人人狠狠综合久久亚洲| aaa欧美色吧激情视频| 精品久久久久av影院| 激情久久五月天| 欧美在线影院一区二区| 狠狠色狠狠色综合| 欧美激情一区二区三区在线| 国产91精品免费| 日韩三级av在线播放| 久久97超碰色| 亚洲bt欧美bt精品777| 亚洲国产日韩a在线播放| 中文一区二区完整视频在线观看| 日韩天堂在线观看| 日韩三级精品电影久久久| 欧美日韩一区三区| 欧美日韩精品免费观看视频| 色综合久久综合中文综合网| 成人午夜av在线| 国产成人免费高清| 国产精品一级片在线观看| 国产精品91xxx| 国产乱码一区二区三区| 国产成人精品一区二| 国产精品一区二区男女羞羞无遮挡| 国内成+人亚洲+欧美+综合在线| 奇米精品一区二区三区在线观看| 亚洲大片免费看| 日韩激情中文字幕| 日韩黄色在线观看| 99久久精品免费精品国产| 亚洲成人av一区二区| 国产色综合久久| 久久精品视频免费观看| 亚洲色图欧美激情| 亚洲激情在线激情| 视频一区二区三区在线| 日本aⅴ精品一区二区三区| 激情文学综合丁香| 国产一区二区免费在线| 国产伦精品一区二区三区视频青涩 | 日本在线不卡视频| 国产真实乱对白精彩久久| 久久99精品国产麻豆婷婷| www.日本不卡| 欧洲一区在线观看| 欧美日韩国产一区二区三区地区| 日韩视频免费观看高清完整版在线观看| 91精品国产综合久久蜜臀| 国产欧美一区二区三区在线老狼| 国产精品免费av| 亚洲一区二区三区四区的| 日本在线不卡视频一二三区| 美女视频网站黄色亚洲| a亚洲天堂av| 一本到不卡免费一区二区| 日韩一区二区三免费高清| 久久只精品国产| 亚洲国产成人av网| 麻豆精品视频在线观看视频| 久久成人久久鬼色| 91亚洲男人天堂| 制服丝袜亚洲网站| 国产精品电影一区二区| 亚洲国产va精品久久久不卡综合| 国产精品1区2区3区| 色www精品视频在线观看| 欧美日韩一区高清| 精品成a人在线观看| 中文字幕综合网| 久久激情综合网| 99re在线视频这里只有精品| 日韩免费成人网| 亚洲欧美国产毛片在线| 精品一区二区三区在线观看国产 | 国产成人无遮挡在线视频| 欧美日韩欧美一区二区| 精品国产一区二区精华| 亚洲一区免费在线观看| 国产在线看一区| 在线电影欧美成精品| 欧美激情综合五月色丁香 | 亚洲成av人片| 国产91精品在线观看| 欧美r级电影在线观看| 一区二区三区四区国产精品| 成人综合在线网站| 91精品国产综合久久福利| 亚洲同性gay激情无套| 激情综合色综合久久综合| 日本韩国欧美三级| 亚洲视频免费看| 国产一区二区三区日韩| 日韩美女视频一区二区在线观看| 亚洲一区二区三区在线| 色婷婷av一区二区三区之一色屋| 亚洲精品一区二区精华| 日韩高清在线电影| 91麻豆国产精品久久| 欧美大黄免费观看| 免费在线观看视频一区| 精品视频在线免费看| 一区二区三区成人在线视频 | 欧美三级电影网站| 国产精品久久二区二区| 成人午夜在线播放| 久久综合九色综合97婷婷| 日韩电影免费一区| 欧美日韩激情一区| 亚洲狠狠丁香婷婷综合久久久| 国产成人一区二区精品非洲| 国产亚洲欧美色| 国产一区二三区| 国产亚洲一区二区在线观看| 天天av天天翘天天综合网 | 国产精品原创巨作av| 欧美日韩精品免费观看视频| 一区二区不卡在线视频 午夜欧美不卡在| 成人精品视频网站| 最新日韩在线视频| www.欧美精品一二区| 亚洲精品欧美二区三区中文字幕| 成人高清av在线| 亚洲精品视频一区| 一本色道久久综合亚洲精品按摩 | 亚洲成a人v欧美综合天堂 | 欧美夫妻性生活| 天天综合色天天| 欧美日高清视频| 午夜欧美视频在线观看| 色女孩综合影院| 午夜精品久久久久久久99水蜜桃| 欧美午夜电影在线播放| 免费看欧美女人艹b| 精品日韩99亚洲| 99久久精品免费精品国产| 一区二区中文字幕在线| 精品亚洲aⅴ乱码一区二区三区| 成人免费在线视频| 欧美一二三四区在线| 色综合久久综合中文综合网| 久久国产欧美日韩精品| 国产色91在线| 91精品国产综合久久精品麻豆| 懂色av一区二区夜夜嗨| 强制捆绑调教一区二区| 亚洲精品免费电影| 综合激情成人伊人| 国产精品久久久久影院亚瑟| 亚洲日本va在线观看| 成人av免费在线观看| 日韩精品乱码免费| 欧美美女直播网站| 国产成人午夜精品影院观看视频 | 久久不见久久见免费视频1| 国产亚洲精品久| 91国模大尺度私拍在线视频| 免费观看在线色综合| 欧美激情自拍偷拍| 制服丝袜成人动漫| 国产91丝袜在线播放九色| 午夜影视日本亚洲欧洲精品| 欧美精品一区二区三区视频| 色婷婷亚洲一区二区三区| 久久成人精品无人区| 一区二区三区在线视频观看| 欧美电影精品一区二区| 欧美中文字幕一二三区视频| 久久超碰97中文字幕| 一区二区三区在线观看网站| 精品国产一区二区三区忘忧草| 国产精品白丝av| 天堂久久一区二区三区| 久久久久久久综合色一本|