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

📄 xmlschemastypes.c.svn-base

📁 这是一个用于解析xml文件的类库。使用这个类库
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
        case XML_SCHEMAS_BOOLEAN:{                const xmlChar *cur = value;                if ((cur[0] == '0') && (cur[1] == 0))                    ret = 0;                else if ((cur[0] == '1') && (cur[1] == 0))                    ret = 1;                else if ((cur[0] == 't') && (cur[1] == 'r')                         && (cur[2] == 'u') && (cur[3] == 'e')                         && (cur[4] == 0))                    ret = 1;                else if ((cur[0] == 'f') && (cur[1] == 'a')                         && (cur[2] == 'l') && (cur[3] == 's')                         && (cur[4] == 'e') && (cur[5] == 0))                    ret = 0;                else                    goto return1;                if (val != NULL) {                    v = xmlSchemaNewValue(XML_SCHEMAS_BOOLEAN);                    if (v != NULL) {                        v->value.b = ret;                        *val = v;                    } else {                        goto error;                    }                }                goto return0;            }        case XML_SCHEMAS_TOKEN:{                const xmlChar *cur = value;                if (IS_BLANK_CH(*cur))                    goto return1;                while (*cur != 0) {                    if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {                        goto return1;                    } else if (*cur == ' ') {                        cur++;                        if (*cur == 0)                            goto return1;                        if (*cur == ' ')                            goto return1;                    } else {                        cur++;                    }                }                if (val != NULL) {                    v = xmlSchemaNewValue(XML_SCHEMAS_TOKEN);                    if (v != NULL) {                        v->value.str = xmlStrdup(value);                        *val = v;                    } else {                        goto error;                    }                }                goto return0;            }        case XML_SCHEMAS_LANGUAGE:            if (xmlCheckLanguageID(value) == 1) {                if (val != NULL) {                    v = xmlSchemaNewValue(XML_SCHEMAS_LANGUAGE);                    if (v != NULL) {                        v->value.str = xmlStrdup(value);                        *val = v;                    } else {                        goto error;                    }                }                goto return0;            }            goto return1;        case XML_SCHEMAS_NMTOKEN:            if (xmlValidateNMToken(value, 1) == 0) {                if (val != NULL) {                    v = xmlSchemaNewValue(XML_SCHEMAS_NMTOKEN);                    if (v != NULL) {                        v->value.str = xmlStrdup(value);                        *val = v;                    } else {                        goto error;                    }                }                goto return0;            }            goto return1;        case XML_SCHEMAS_NMTOKENS:            ret = xmlSchemaValAtomicListNode(xmlSchemaTypeNmtokenDef,                                             value, val, node);            if (ret > 0)                ret = 0;            else                ret = 1;            goto done;        case XML_SCHEMAS_NAME:            ret = xmlValidateName(value, 1);            if ((ret == 0) && (val != NULL)) {                TODO;            }            goto done;        case XML_SCHEMAS_QNAME:{                xmlChar *uri = NULL;                xmlChar *local = NULL;                ret = xmlValidateQName(value, 1);                if ((ret == 0) && (node != NULL)) {                    xmlChar *prefix;                    local = xmlSplitQName2(value, &prefix);                    if (prefix != NULL) {                        xmlNsPtr ns;                        ns = xmlSearchNs(node->doc, node, prefix);                        if (ns == NULL)                            ret = 1;                        else if (val != NULL)                            uri = xmlStrdup(ns->href);                    }                    if ((local != NULL) && ((val == NULL) || (ret != 0)))                        xmlFree(local);                    if (prefix != NULL)                        xmlFree(prefix);                }                if ((ret == 0) && (val != NULL)) {                    v = xmlSchemaNewValue(XML_SCHEMAS_QNAME);                    if (v != NULL) {                        if (local != NULL)                            v->value.qname.name = local;                        else                            v->value.qname.name = xmlStrdup(value);                        if (uri != NULL)                            v->value.qname.uri = uri;                        *val = v;                    } else {                        if (local != NULL)                            xmlFree(local);                        if (uri != NULL)                            xmlFree(uri);                        goto error;                    }                }                goto done;            }        case XML_SCHEMAS_NCNAME:            ret = xmlValidateNCName(value, 1);            if ((ret == 0) && (val != NULL)) {                v = xmlSchemaNewValue(XML_SCHEMAS_NCNAME);                if (v != NULL) {                    v->value.str = xmlStrdup(value);                    *val = v;                } else {                    goto error;                }            }            goto done;        case XML_SCHEMAS_ID:            ret = xmlValidateNCName(value, 1);            if ((ret == 0) && (val != NULL)) {                v = xmlSchemaNewValue(XML_SCHEMAS_ID);                if (v != NULL) {                    v->value.str = xmlStrdup(value);                    *val = v;                } else {                    goto error;                }            }            if ((ret == 0) && (node != NULL) &&                (node->type == XML_ATTRIBUTE_NODE)) {                xmlAttrPtr attr = (xmlAttrPtr) node;                /*                 * NOTE: the IDness might have already be declared in the DTD                 */                if (attr->atype != XML_ATTRIBUTE_ID) {                    xmlIDPtr res;                    xmlChar *strip;                    strip = xmlSchemaStrip(value);                    if (strip != NULL) {                        res = xmlAddID(NULL, node->doc, strip, attr);                        xmlFree(strip);                    } else                        res = xmlAddID(NULL, node->doc, value, attr);                    if (res == NULL) {                        ret = 2;                    } else {                        attr->atype = XML_ATTRIBUTE_ID;                    }                }            }            goto done;        case XML_SCHEMAS_IDREF:            ret = xmlValidateNCName(value, 1);            if ((ret == 0) && (val != NULL)) {                TODO;            }            if ((ret == 0) && (node != NULL) &&                (node->type == XML_ATTRIBUTE_NODE)) {                xmlAttrPtr attr = (xmlAttrPtr) node;                xmlChar *strip;                strip = xmlSchemaStrip(value);                if (strip != NULL) {                    xmlAddRef(NULL, node->doc, strip, attr);                    xmlFree(strip);                } else                    xmlAddRef(NULL, node->doc, value, attr);                attr->atype = XML_ATTRIBUTE_IDREF;            }            goto done;        case XML_SCHEMAS_IDREFS:            ret = xmlSchemaValAtomicListNode(xmlSchemaTypeIdrefDef,                                             value, val, node);            if (ret < 0)                ret = 2;            else                ret = 0;            if ((ret == 0) && (node != NULL) &&                (node->type == XML_ATTRIBUTE_NODE)) {                xmlAttrPtr attr = (xmlAttrPtr) node;                attr->atype = XML_ATTRIBUTE_IDREFS;            }            goto done;        case XML_SCHEMAS_ENTITY:{                xmlChar *strip;                ret = xmlValidateNCName(value, 1);                if ((node == NULL) || (node->doc == NULL))                    ret = 3;                if (ret == 0) {                    xmlEntityPtr ent;                    strip = xmlSchemaStrip(value);                    if (strip != NULL) {                        ent = xmlGetDocEntity(node->doc, strip);                        xmlFree(strip);                    } else {                        ent = xmlGetDocEntity(node->doc, value);                    }                    if ((ent == NULL) ||                        (ent->etype !=                         XML_EXTERNAL_GENERAL_UNPARSED_ENTITY))                        ret = 4;                }                if ((ret == 0) && (val != NULL)) {                    TODO;                }                if ((ret == 0) && (node != NULL) &&                    (node->type == XML_ATTRIBUTE_NODE)) {                    xmlAttrPtr attr = (xmlAttrPtr) node;                    attr->atype = XML_ATTRIBUTE_ENTITY;                }                goto done;            }        case XML_SCHEMAS_ENTITIES:            if ((node == NULL) || (node->doc == NULL))                goto return3;            ret = xmlSchemaValAtomicListNode(xmlSchemaTypeEntityDef,                                             value, val, node);            if (ret <= 0)                ret = 1;            else                ret = 0;            if ((ret == 0) && (node != NULL) &&                (node->type == XML_ATTRIBUTE_NODE)) {                xmlAttrPtr attr = (xmlAttrPtr) node;                attr->atype = XML_ATTRIBUTE_ENTITIES;            }            goto done;        case XML_SCHEMAS_NOTATION:{                xmlChar *uri = NULL;                xmlChar *local = NULL;                ret = xmlValidateQName(value, 1);                if ((ret == 0) && (node != NULL)) {                    xmlChar *prefix;                    local = xmlSplitQName2(value, &prefix);                    if (prefix != NULL) {                        xmlNsPtr ns;                        ns = xmlSearchNs(node->doc, node, prefix);                        if (ns == NULL)                            ret = 1;                        else if (val != NULL)                            uri = xmlStrdup(ns->href);                    }                    if ((local != NULL) && ((val == NULL) || (ret != 0)))                        xmlFree(local);                    if (prefix != NULL)                        xmlFree(prefix);                }                if ((node == NULL) || (node->doc == NULL))                    ret = 3;                if (ret == 0) {                    ret = xmlValidateNotationUse(NULL, node->doc, value);                    if (ret == 1)                        ret = 0;                    else                        ret = 1;                }                if ((ret == 0) && (val != NULL)) {                    v = xmlSchemaNewValue(XML_SCHEMAS_NOTATION);                    if (v != NULL) {                        if (local != NULL)                            v->value.qname.name = local;                        else                            v->value.qname.name = xmlStrdup(value);                        if (uri != NULL)                            v->value.qname.uri = uri;                        *val = v;                    } else {                        if (local != NULL)                            xmlFree(local);                        if (uri != NULL)                            xmlFree(uri);                        goto error;                    }                }                goto done;            }        case XML_SCHEMAS_ANYURI:{                if (*value != 0) {                    xmlURIPtr uri = xmlParseURI((const char *) value);                    if (uri == NULL)                        goto return1;                    xmlFreeURI(uri);                }                if (val != NULL) {                    v = xmlSchemaNewValue(XML_SCHEMAS_ANYURI);                    if (v == NULL)                        goto error;                    v->value.str = xmlStrdup(value);                    *val = v;                }                goto return0;            }        case XML_SCHEMAS_HEXBINARY:{                const xmlChar *cur = value;                xmlChar *base;                int total, i = 0;                if (cur == NULL)                    goto return1;                while (((*cur >= '0') && (*cur <= '9')) ||                       ((*cur >= 'A') && (*cur <= 'F')) ||                       ((*cur >= 'a') && (*cur <= 'f'))) {                    i++;                    cur++;                }                if (*cur != 0)                    goto return1;                if ((i % 2) != 0)                    goto return1;                if (val != NULL) {                    v = xmlSchemaNewValue(XML_SCHEMAS_HEXBINARY);                    if (v == NULL)                        goto error;                    cur = xmlStrdup(value);                    if (cur == NULL) {		        xmlSchemaTypeErrMemory(node, "allocating hexbin data");                        xmlFree(v);                        goto return1;                    }                    total = i / 2;      /* number of octets */                    base = (xmlChar *) cur;                    while (i-- > 0) {                        if (*base >= 'a')                            *base = *base - ('a' - 'A');                        base++;                    }                    v->value.hex.str = (xmlChar *) cur;                    v->value.hex.total = total;                    *val = v;                }                goto return0;            }        case XML_SCHEMAS_BASE64BINARY:{                /* ISSUE:                 *                  * Ignore all stray characters? (yes, currently)                 * Worry about long lines? (no, currently)                 *                  * rfc2045.txt:                 *                  * "The encoded output stream must be represented in lines of                 * no more than 76 characters each.  All line breaks or other                 * characters not found in Table 1 must be ignored by decoding                 * software.  In base64 data, characters other than those in                 * Table 1, line breaks, and other white space probably                 * indicate a transmission error, about which a warning                 * message or even a message rejection might be appropriate                 * under some circumstances." */                const xmlChar *cur = value;                xmlChar *base;                int total, i = 0, pad = 0;                if (cur == NULL)                    goto return1;             

⌨️ 快捷键说明

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