⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encoding.c.svn-base

📁 这是一个用于解析xml文件的类库。使用这个类库
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
    int i;    if (xmlCharEncodingAliases == NULL)	return;    for (i = 0;i < xmlCharEncodingAliasesNb;i++) {	if (xmlCharEncodingAliases[i].name != NULL)	    xmlFree((char *) xmlCharEncodingAliases[i].name);	if (xmlCharEncodingAliases[i].alias != NULL)	    xmlFree((char *) xmlCharEncodingAliases[i].alias);    }    xmlCharEncodingAliasesNb = 0;    xmlCharEncodingAliasesMax = 0;    xmlFree(xmlCharEncodingAliases);    xmlCharEncodingAliases = NULL;}/** * xmlGetEncodingAlias: * @alias:  the alias name as parsed, in UTF-8 format (ASCII actually) * * Lookup an encoding name for the given alias. *  * Returns NULL if not found, otherwise the original name */const char *xmlGetEncodingAlias(const char *alias) {    int i;    char upper[100];    if (alias == NULL)	return(NULL);    if (xmlCharEncodingAliases == NULL)	return(NULL);    for (i = 0;i < 99;i++) {        upper[i] = toupper(alias[i]);	if (upper[i] == 0) break;    }    upper[i] = 0;    /*     * Walk down the list looking for a definition of the alias     */    for (i = 0;i < xmlCharEncodingAliasesNb;i++) {	if (!strcmp(xmlCharEncodingAliases[i].alias, upper)) {	    return(xmlCharEncodingAliases[i].name);	}    }    return(NULL);}/** * xmlAddEncodingAlias: * @name:  the encoding name as parsed, in UTF-8 format (ASCII actually) * @alias:  the alias name as parsed, in UTF-8 format (ASCII actually) * * Registers an alias @alias for an encoding named @name. Existing alias * will be overwritten. *  * Returns 0 in case of success, -1 in case of error */intxmlAddEncodingAlias(const char *name, const char *alias) {    int i;    char upper[100];    if ((name == NULL) || (alias == NULL))	return(-1);    for (i = 0;i < 99;i++) {        upper[i] = toupper(alias[i]);	if (upper[i] == 0) break;    }    upper[i] = 0;    if (xmlCharEncodingAliases == NULL) {	xmlCharEncodingAliasesNb = 0;	xmlCharEncodingAliasesMax = 20;	xmlCharEncodingAliases = (xmlCharEncodingAliasPtr) 	      xmlMalloc(xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias));	if (xmlCharEncodingAliases == NULL)	    return(-1);    } else if (xmlCharEncodingAliasesNb >= xmlCharEncodingAliasesMax) {	xmlCharEncodingAliasesMax *= 2;	xmlCharEncodingAliases = (xmlCharEncodingAliasPtr) 	      xmlRealloc(xmlCharEncodingAliases,		         xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias));    }    /*     * Walk down the list looking for a definition of the alias     */    for (i = 0;i < xmlCharEncodingAliasesNb;i++) {	if (!strcmp(xmlCharEncodingAliases[i].alias, upper)) {	    /*	     * Replace the definition.	     */	    xmlFree((char *) xmlCharEncodingAliases[i].name);	    xmlCharEncodingAliases[i].name = xmlMemStrdup(name);	    return(0);	}    }    /*     * Add the definition     */    xmlCharEncodingAliases[xmlCharEncodingAliasesNb].name = xmlMemStrdup(name);    xmlCharEncodingAliases[xmlCharEncodingAliasesNb].alias = xmlMemStrdup(upper);    xmlCharEncodingAliasesNb++;    return(0);}/** * xmlDelEncodingAlias: * @alias:  the alias name as parsed, in UTF-8 format (ASCII actually) * * Unregisters an encoding alias @alias *  * Returns 0 in case of success, -1 in case of error */intxmlDelEncodingAlias(const char *alias) {    int i;    if (alias == NULL)	return(-1);    if (xmlCharEncodingAliases == NULL)	return(-1);    /*     * Walk down the list looking for a definition of the alias     */    for (i = 0;i < xmlCharEncodingAliasesNb;i++) {	if (!strcmp(xmlCharEncodingAliases[i].alias, alias)) {	    xmlFree((char *) xmlCharEncodingAliases[i].name);	    xmlFree((char *) xmlCharEncodingAliases[i].alias);	    xmlCharEncodingAliasesNb--;	    memmove(&xmlCharEncodingAliases[i], &xmlCharEncodingAliases[i + 1],		    sizeof(xmlCharEncodingAlias) * (xmlCharEncodingAliasesNb - i));	    return(0);	}    }    return(-1);}/** * xmlParseCharEncoding: * @name:  the encoding name as parsed, in UTF-8 format (ASCII actually) * * Compare the string to the encoding schemes already known. Note * that the comparison is case insensitive accordingly to the section * [XML] 4.3.3 Character Encoding in Entities. *  * Returns one of the XML_CHAR_ENCODING_... values or XML_CHAR_ENCODING_NONE * if not recognized. */xmlCharEncodingxmlParseCharEncoding(const char* name){    const char *alias;    char upper[500];    int i;    if (name == NULL)	return(XML_CHAR_ENCODING_NONE);    /*     * Do the alias resolution     */    alias = xmlGetEncodingAlias(name);    if (alias != NULL)	name = alias;    for (i = 0;i < 499;i++) {        upper[i] = toupper(name[i]);	if (upper[i] == 0) break;    }    upper[i] = 0;    if (!strcmp(upper, "")) return(XML_CHAR_ENCODING_NONE);    if (!strcmp(upper, "UTF-8")) return(XML_CHAR_ENCODING_UTF8);    if (!strcmp(upper, "UTF8")) return(XML_CHAR_ENCODING_UTF8);    /*     * NOTE: if we were able to parse this, the endianness of UTF16 is     *       already found and in use     */    if (!strcmp(upper, "UTF-16")) return(XML_CHAR_ENCODING_UTF16LE);    if (!strcmp(upper, "UTF16")) return(XML_CHAR_ENCODING_UTF16LE);        if (!strcmp(upper, "ISO-10646-UCS-2")) return(XML_CHAR_ENCODING_UCS2);    if (!strcmp(upper, "UCS-2")) return(XML_CHAR_ENCODING_UCS2);    if (!strcmp(upper, "UCS2")) return(XML_CHAR_ENCODING_UCS2);    /*     * NOTE: if we were able to parse this, the endianness of UCS4 is     *       already found and in use     */    if (!strcmp(upper, "ISO-10646-UCS-4")) return(XML_CHAR_ENCODING_UCS4LE);    if (!strcmp(upper, "UCS-4")) return(XML_CHAR_ENCODING_UCS4LE);    if (!strcmp(upper, "UCS4")) return(XML_CHAR_ENCODING_UCS4LE);        if (!strcmp(upper,  "ISO-8859-1")) return(XML_CHAR_ENCODING_8859_1);    if (!strcmp(upper,  "ISO-LATIN-1")) return(XML_CHAR_ENCODING_8859_1);    if (!strcmp(upper,  "ISO LATIN 1")) return(XML_CHAR_ENCODING_8859_1);    if (!strcmp(upper,  "ISO-8859-2")) return(XML_CHAR_ENCODING_8859_2);    if (!strcmp(upper,  "ISO-LATIN-2")) return(XML_CHAR_ENCODING_8859_2);    if (!strcmp(upper,  "ISO LATIN 2")) return(XML_CHAR_ENCODING_8859_2);    if (!strcmp(upper,  "ISO-8859-3")) return(XML_CHAR_ENCODING_8859_3);    if (!strcmp(upper,  "ISO-8859-4")) return(XML_CHAR_ENCODING_8859_4);    if (!strcmp(upper,  "ISO-8859-5")) return(XML_CHAR_ENCODING_8859_5);    if (!strcmp(upper,  "ISO-8859-6")) return(XML_CHAR_ENCODING_8859_6);    if (!strcmp(upper,  "ISO-8859-7")) return(XML_CHAR_ENCODING_8859_7);    if (!strcmp(upper,  "ISO-8859-8")) return(XML_CHAR_ENCODING_8859_8);    if (!strcmp(upper,  "ISO-8859-9")) return(XML_CHAR_ENCODING_8859_9);    if (!strcmp(upper, "ISO-2022-JP")) return(XML_CHAR_ENCODING_2022_JP);    if (!strcmp(upper, "SHIFT_JIS")) return(XML_CHAR_ENCODING_SHIFT_JIS);    if (!strcmp(upper, "EUC-JP")) return(XML_CHAR_ENCODING_EUC_JP);#ifdef DEBUG_ENCODING    xmlGenericError(xmlGenericErrorContext, "Unknown encoding %s\n", name);#endif    return(XML_CHAR_ENCODING_ERROR);}/** * xmlGetCharEncodingName: * @enc:  the encoding * * The "canonical" name for XML encoding. * C.f. http://www.w3.org/TR/REC-xml#charencoding * Section 4.3.3  Character Encoding in Entities * * Returns the canonical name for the given encoding */const char*xmlGetCharEncodingName(xmlCharEncoding enc) {    switch (enc) {        case XML_CHAR_ENCODING_ERROR:	    return(NULL);        case XML_CHAR_ENCODING_NONE:	    return(NULL);        case XML_CHAR_ENCODING_UTF8:	    return("UTF-8");        case XML_CHAR_ENCODING_UTF16LE:	    return("UTF-16");        case XML_CHAR_ENCODING_UTF16BE:	    return("UTF-16");        case XML_CHAR_ENCODING_EBCDIC:            return("EBCDIC");        case XML_CHAR_ENCODING_UCS4LE:            return("ISO-10646-UCS-4");        case XML_CHAR_ENCODING_UCS4BE:            return("ISO-10646-UCS-4");        case XML_CHAR_ENCODING_UCS4_2143:            return("ISO-10646-UCS-4");        case XML_CHAR_ENCODING_UCS4_3412:            return("ISO-10646-UCS-4");        case XML_CHAR_ENCODING_UCS2:            return("ISO-10646-UCS-2");        case XML_CHAR_ENCODING_8859_1:	    return("ISO-8859-1");        case XML_CHAR_ENCODING_8859_2:	    return("ISO-8859-2");        case XML_CHAR_ENCODING_8859_3:	    return("ISO-8859-3");        case XML_CHAR_ENCODING_8859_4:	    return("ISO-8859-4");        case XML_CHAR_ENCODING_8859_5:	    return("ISO-8859-5");        case XML_CHAR_ENCODING_8859_6:	    return("ISO-8859-6");        case XML_CHAR_ENCODING_8859_7:	    return("ISO-8859-7");        case XML_CHAR_ENCODING_8859_8:	    return("ISO-8859-8");        case XML_CHAR_ENCODING_8859_9:	    return("ISO-8859-9");        case XML_CHAR_ENCODING_2022_JP:            return("ISO-2022-JP");        case XML_CHAR_ENCODING_SHIFT_JIS:            return("Shift-JIS");        case XML_CHAR_ENCODING_EUC_JP:            return("EUC-JP");	case XML_CHAR_ENCODING_ASCII:	    return(NULL);    }    return(NULL);}/************************************************************************ *									* *			Char encoding handlers				* *									* ************************************************************************//* the size should be growable, but it's not a big deal ... */#define MAX_ENCODING_HANDLERS 50static xmlCharEncodingHandlerPtr *handlers = NULL;static int nbCharEncodingHandler = 0;/* * The default is UTF-8 for XML, that's also the default used for the * parser internals, so the default encoding handler is NULL */static xmlCharEncodingHandlerPtr xmlDefaultCharEncodingHandler = NULL;/** * xmlNewCharEncodingHandler: * @name:  the encoding name, in UTF-8 format (ASCII actually) * @input:  the xmlCharEncodingInputFunc to read that encoding * @output:  the xmlCharEncodingOutputFunc to write that encoding * * Create and registers an xmlCharEncodingHandler. * * Returns the xmlCharEncodingHandlerPtr created (or NULL in case of error). */xmlCharEncodingHandlerPtrxmlNewCharEncodingHandler(const char *name,                           xmlCharEncodingInputFunc input,                          xmlCharEncodingOutputFunc output) {    xmlCharEncodingHandlerPtr handler;    const char *alias;    char upper[500];    int i;    char *up = 0;    /*     * Do the alias resolution     */    alias = xmlGetEncodingAlias(name);    if (alias != NULL)	name = alias;    /*     * Keep only the uppercase version of the encoding.     */    if (name == NULL) {        xmlGenericError(xmlGenericErrorContext,		"xmlNewCharEncodingHandler : no name !\n");	return(NULL);    }    for (i = 0;i < 499;i++) {        upper[i] = toupper(name[i]);	if (upper[i] == 0) break;    }    upper[i] = 0;    up = xmlMemStrdup(upper);    if (up == NULL) {        xmlGenericError(xmlGenericErrorContext,		"xmlNewCharEncodingHandler : out of memory !\n");	return(NULL);    }    /*     * allocate and fill-up an handler block.     */    handler = (xmlCharEncodingHandlerPtr)              xmlMalloc(sizeof(xmlCharEncodingHandler));    if (handler == NULL) {        xmlGenericError(xmlGenericErrorContext,		"xmlNewCharEncodingHandler : out of memory !\n");	return(NULL);    }    handler->input = input;    handler->output = output;    handler->name = up;#ifdef LIBXML_ICONV_ENABLED    handler->iconv_in = NULL;    handler->iconv_out = NULL;#endif /* LIBXML_ICONV_ENABLED */    /*     * registers and returns the handler.     */    xmlRegisterCharEncodingHandler(handler);#ifdef DEBUG_ENCODING    xmlGenericError(xmlGenericErrorContext,	    "Registered encoding handler for %s\n", name);#endif    return(handler);}/** * xmlInitCharEncodingHandlers: * * Initialize the char encoding support, it registers the default * encoding supported. * NOTE: while public, this function usually doesn't need to be called *       in normal processing. */voidxmlInitCharEncodingHandlers(void) {    unsigned short int tst = 0x1234;    unsigned char *ptr = (unsigned char *) &tst;     if (handlers != NULL) return;    handlers = (xmlCharEncodingHandlerPtr *)        xmlMalloc(MAX_ENCODING_HANDLERS * sizeof(xmlCharEncodingHandlerPtr));    if (*ptr == 0x12) xmlLittleEndian = 0;    else if (*ptr == 0x34) xmlLittleEndian = 1;    else xmlGenericError(xmlGenericErrorContext,	    "Odd problem at endianness detection\n");    if (handlers == NULL) {        xmlGenericError(xmlGenericErrorContext,		"xmlInitCharEncodingHandlers : out of memory !\n");	return;    }    xmlNewCharEncodingHandler("UTF-8", UTF8ToUTF8, UTF8ToUTF8);#ifdef LIBXML_OUTPUT_ENABLED    xmlUTF16LEHandler =           xmlNewCharEncodingHandler("UTF-16LE", UTF16LEToUTF8, UTF8ToUTF16LE);    xmlUTF16BEHandler =           xmlNewCharEncodingHandler("UTF-16BE", UTF16BEToUTF8, UTF8ToUTF16BE);    xmlNewCharEncodingHandler("UTF-16", UTF16LEToUTF8, UTF8ToUTF16);    xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, UTF8Toisolat1);    xmlNewCharEncodingHandler("ASCII", asciiToUTF8, UTF8Toascii);    xmlNewCharEncodingHandler("US-ASCII", asciiToUTF8, UTF8Toascii);#ifdef LIBXML_HTML_ENABLED    xmlNewCharEncodingHandler("HTML", NULL, UTF8ToHtml);#endif#else    xmlUTF16LEHandler =           xmlNewCharEncodingHandler("UTF-16LE", UTF16LEToUTF8, NULL);    xmlUTF16BEHandler =           xmlNewCharEncodingHandler("UTF-16BE", UTF16BEToUTF8, NULL);    xmlNewCharEncodingHandler("UTF-16", UTF16LEToUTF8, NULL);    xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, NULL);    xmlNewCharEncodingHandler("ASCII", asciiToUTF8, NULL);    xmlNewCharEncodingHandler("US-ASCII", asciiToUTF8, NULL);#endif /* LIBXML_OUTPUT_ENABLED */#ifndef LIBXML_ICONV_ENABLED#ifdef LIBXML_ISO8859X_ENABLED    xmlRegisterCharEncodingHandlersISO8859x ();#endif#endif}

⌨️ 快捷键说明

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