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

📄 cslabel.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
📖 第 1 页 / 共 5 页
字号:
    {return pCSLabel->pCurrentSingleLabel;}PUBLIC LabelRating_t * CSLabel_getLabelRating(CSLabel_t * pCSLabel)    {return pCSLabel->pCurrentLabelRating;}PUBLIC char * CSLabel_getRatingName(CSLabel_t * pCSLabel)    {return pCSLabel->pCurrentLabelRating ?        SVal_value(&pCSLabel->pCurrentLabelRating->identifier): 0;}PUBLIC Range_t * CSLabel_getLabelRatingRange(CSLabel_t * pCSLabel)    {return pCSLabel->pCurrentRange;}PUBLIC char * CSLabel_getRatingStr(CSLabel_t * pCSLabel){    HTChunk * pChunk;    HTList * ranges;    Range_t * curRange;    FVal_t fVal;    int count = 0;    fVal = CSLabel_getLabelRating(pCSLabel)->value;    if (FVal_initialized(&fVal))        return FVal_toStr(&fVal);    pChunk = HTChunk_new(20);    ranges = CSLabel_getLabelRating(pCSLabel)->ranges;    while ((curRange = (Range_t *) HTList_nextObject(ranges))) {        char * ptr;	count++;	ptr = Range_toStr(curRange);	if (count > 1)	    HTChunk_puts(pChunk, " ");	HTChunk_puts(pChunk, ptr);	HT_FREE(ptr);    }    return HTChunk_toCString(pChunk);}PUBLIC CSParse_t * CSParse_newLabel(LabelTargetCallback_t * pLabelTargetCallback, 				    LLErrorHandler_t * pLLErrorHandler){    CSParse_t * me = CSParse_new();    me->pParseContext->engineOf = &CSParse_targetParser;    me->pParseContext->pTargetChangeCallback = &targetChangeCallback;    me->pParseContext->pParseErrorHandler = &parseErrorHandler;    me->target.pCSLabel = CSLabel_new(CSLLData_new(), pLabelTargetCallback, pLLErrorHandler);    me->pTargetObject = &LabelList_targetObject;    me->currentSubState = SubState_N;    return me;}PUBLIC CSLabel_t * CSParse_getLabel(CSParse_t * me){    return (me->target.pCSLabel);}PUBLIC BOOL CSParse_deleteLabel(CSParse_t * pCSParse){    CSLabel_t * me = GetCSLabel(pCSParse);    CSLLData_free(CSLabel_getCSLLData(me));    CSLabel_free(me);	CSParse_delete(pCSParse);    return YES;}/* D E F A U L T   P A R S I N G   H A N D L E R S */PRIVATE StateRet_t targetChangeCallback(CSParse_t * pCSParse, TargetObject_t * pTargetObject, CSParseTC_t target, BOOL closed, void * pVoid){	CSLabel_t * pCSLabel = GetCSLabel(pCSParse);	if (pCSLabel->pLabelTargetCallback)		return (*pCSLabel->pLabelTargetCallback)(pCSLabel, pCSParse, (CSLLTC_t)target, closed, pVoid);    return StateRet_OK;}PRIVATE StateRet_t parseErrorHandler(CSParse_t * pCSParse, const char * token, char demark, StateRet_t errorCode){	CSLabel_t * pCSLabel = GetCSLabel(pCSParse);	if (pCSLabel->pLLErrorHandler)		return (*pCSLabel->pLLErrorHandler)(pCSLabel, pCSParse, token, demark, errorCode);  return errorCode;}/* CSParse_doc methods *//* P A R S I N G   S T A T E   F U N C T I O N S */#ifndef NO_CHAR_TESTPRIVATE BOOL charSetOK(CSParse_t * pCSParse, char * checkMe, CharSet_t set){    for (;*checkMe;checkMe++) {        if (set & CharSet_ALPHAS &&             ((*checkMe >= 'A' && *checkMe <= 'Z') ||              (*checkMe >= 'a' && *checkMe <= 'z')))            continue;        if (set & CharSet_DIGITS &&             ((*checkMe >= '0' && *checkMe <= '9') || *checkMe == '.'))            continue;        if (set & CharSet_PLUSMINUS &&             ((*checkMe == '+' || *checkMe == '-')))            continue;        if (set & CharSet_FORSLASH &&             *checkMe == '/')            continue;        if (set & CharSet_BASE64_EXTRAS &&             ((*checkMe == '+' || *checkMe == '/' || *checkMe == '=')))            continue;        if (set & CharSet_DATE_EXTRAS &&             (*checkMe == '.' || *checkMe == ':' ||              *checkMe == '-' || *checkMe == 'T'))            continue;		/* RFC1738:2.1:"+.-","#%",";/"?:@=&" 2.2:"$-_.+!*'()," */        if (set & CharSet_URL_EXTRAS &&             (*checkMe == ':' || *checkMe == '?' ||              *checkMe == '#' || *checkMe == '%' ||              *checkMe == '/' || *checkMe == '.' ||             *checkMe == '-' || *checkMe == '_' ||	     *checkMe == '~' || *checkMe == '\\'))            continue;/* '.' | ' ' | ',' | ';' | ':' | '&' | '=' | '?' | '!' | '*' | '~' | '@' | '#' */        if (set & CharSet_EXTENS &&             (*checkMe == '.' || *checkMe == ' ' ||              *checkMe == ',' || *checkMe == ';' ||              *checkMe == ':' || *checkMe == '&' ||              *checkMe == '=' || *checkMe == '?' ||              *checkMe == '!' || *checkMe == '*' ||              *checkMe == '~' || *checkMe == '@' ||              *checkMe == '#' || *checkMe == '\''||              *checkMe == '/' || *checkMe == '-'))            continue;        pCSParse->pParseContext->pTokenError = checkMe;        return FALSE;    }    return TRUE;}#endif /* !NO_CHAR_TEST */PRIVATE StateRet_t isQuoted(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark){    ParseContext_t * pParseContext = pCSParse->pParseContext;    if (!pParseContext->observedQuotes)        return StateRet_WARN_NO_MATCH;    if (Punct_badDemark(pStateToken->validPunctuation, demark))        return StateRet_WARN_BAD_PUNCT;    return StateRet_OK;}PRIVATE StateRet_t hasToken(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark){    return token ? StateRet_OK : StateRet_WARN_NO_MATCH;}#if 0PRIVATE StateRet_t clearToken(CSParse_t * pCSParse, char * token, char demark){    HTChunk_clear(pCSParse->token);    return StateRet_OK;}#endif/* getOption - see if token matches an option.This may be called by:    ServiceInfo: add option to existent options, pCurrentLabelError is set by ServiceInfo_open    Label: kick off SingleLabel - SingleLabel_new(), pCurrentLabelError is 0    SingleLabel: add another option to existent options, pCurrentLabelError is set by SingleLabel_open */#define CSOffsetOf(s,m) (size_t)&(((s *)0)->m)#define CHECK_OPTION_TOKEN_BVAL1(text, pointer) \if (!strcasecomp(token, text)) {\    pCSParse->pParseContext->valTarget.pTargetBVal = pointer;\    pCSParse->pParseContext->valType = ValType_BVAL;\    break;\}#define CHECK_OPTION_TOKEN_FVAL1(text, pointer) \if (!strcasecomp(token, text)) {\    pCSParse->pParseContext->valTarget.pTargetFVal = pointer;\    pCSParse->pParseContext->valType = ValType_FVAL;\    break;\}#define CHECK_OPTION_TOKEN_SVAL1(text, pointer, charSet) \if (!strcasecomp(token, text)) {\    pCSParse->pParseContext->valTarget.pTargetSVal = pointer;\    pCSParse->pParseContext->valType = ValType_SVAL;\    SET_CHAR_SET(charSet)\    break;\}#define CHECK_OPTION_TOKEN_DVAL1(text, pointer) \if (!strcasecomp(token, text)) {\    pCSParse->pParseContext->valTarget.pTargetDVal = pointer;\    pCSParse->pParseContext->valType = ValType_DVAL;\    break;\}PRIVATE StateRet_t getOption(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark){    CSLabel_t * pCSLabel = GetCSLabel(pCSParse);    LabelOptions_t * me = pCSLabel->pCurrentLabelOptions;    if (!token)        return StateRet_WARN_NO_MATCH;    if (!me)        me = pCSLabel->pCurrentLabelOptions = LabelOptions_new(pCSLabel->pCurrentServiceInfo->pLabelOptions);    /* match token against legal options */    pCSParse->pParseContext->valType = ValType_NONE;  /* use valType to flag a match */    do { /* fake do loop for break statements (to religiously avoid the goto) */        CHECK_OPTION_TOKEN_DVAL1("at", &me->at)        CHECK_OPTION_TOKEN_SVAL1("by", &me->by, CharSet_EXT_ALPHANUM)        CHECK_OPTION_TOKEN_SVAL1("complete_label", &me->complete_label, CharSet_URL)        CHECK_OPTION_TOKEN_SVAL1("full", &me->complete_label, CharSet_URL)        CHECK_OPTION_TOKEN_SVAL1("for", &me->fur, CharSet_URL)        CHECK_OPTION_TOKEN_BVAL1("generic", &me->generic)        CHECK_OPTION_TOKEN_BVAL1("gen", &me->generic)        CHECK_OPTION_TOKEN_SVAL1("MIC-md5", &me->MIC_md5, CharSet_BASE64)        CHECK_OPTION_TOKEN_SVAL1("md5", &me->MIC_md5, CharSet_BASE64)        CHECK_OPTION_TOKEN_DVAL1("on", &me->on)        CHECK_OPTION_TOKEN_SVAL1("signature-PKCS", &me->signature_PKCS, CharSet_BASE64)        CHECK_OPTION_TOKEN_DVAL1("until", &me->until)        CHECK_OPTION_TOKEN_DVAL1("exp", &me->until)		if (!strcasecomp(token, "comment")) {			pCSParse->pParseContext->valTarget.pTargetList = &me->comments;		    pCSParse->pParseContext->valType = ValType_COMMENT;		    break;		}    } while (0);    if (pCSParse->pParseContext->valType == ValType_NONE)        return StateRet_WARN_NO_MATCH;    if (Punct_badDemark(pStateToken->validPunctuation, demark))        return StateRet_WARN_BAD_PUNCT;    return StateRet_OK;}PRIVATE StateRet_t getOptionValue(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark){    CSLabel_t * pCSLabel = GetCSLabel(pCSParse);    switch (pCSParse->pParseContext->valType) {        case ValType_BVAL:            BVal_readVal(pCSParse->pParseContext->valTarget.pTargetBVal, token);            pCSParse->pParseContext->valType = ValType_NONE;            break;        case ValType_FVAL:            CHECK_CAR_SET(CharSet_NUMBER)            FVal_readVal(pCSParse->pParseContext->valTarget.pTargetFVal, token);            pCSParse->pParseContext->valType = ValType_NONE;            break;        case ValType_SVAL:            CHECK_CAR_SET(pCSLabel->targetCharSet)            SVal_readVal(pCSParse->pParseContext->valTarget.pTargetSVal, token);            pCSParse->pParseContext->valType = ValType_NONE;            break;        case ValType_DVAL:            CHECK_CAR_SET(CharSet_DATE)            DVal_readVal(pCSParse->pParseContext->valTarget.pTargetDVal, token);            pCSParse->pParseContext->valType = ValType_NONE;            break;        case ValType_COMMENT:            CHECK_CAR_SET(CharSet_EXT_ALPHANUM)			{				char * ptr = 0;				StrAllocCopy(ptr, token);				HTList_appendObject(*pCSParse->pParseContext->valTarget.pTargetList, (void *)ptr);			}            break;	default:	    break;    }    return StateRet_OK;}PRIVATE StateRet_t LabelList_open(CSParse_t * pCSParse, char * token, char demark){    return StateRet_OK;}PRIVATE StateRet_t LabelList_getVersion(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark){static const char versionPrefix[] = "PICS-";    CSLabel_t * pCSLabel = GetCSLabel(pCSParse);    if (!token)        return StateRet_WARN_NO_MATCH;    if (strncasecomp(token, versionPrefix, sizeof(versionPrefix)-1))        return StateRet_WARN_NO_MATCH;	token += sizeof(versionPrefix)-1;    CHECK_CAR_SET(CharSet_NUMBER)    FVal_readVal(&pCSLabel->pCSLLData->version, token);    return StateRet_OK;}PRIVATE StateRet_t LabelList_close(CSParse_t * pCSParse, char * token, char demark){    return StateRet_DONE;}PRIVATE void LabelList_destroy(CSParse_t * pCSParse){}PRIVATE StateRet_t ServiceInfo_open(CSParse_t * pCSParse, char * token, char demark){    CSLabel_t * pCSLabel = GetCSLabel(pCSParse);    pCSLabel->pCurrentServiceInfo = ServiceInfo_new();    pCSLabel->currentLabelNumber = 0;    HTList_appendObject(pCSLabel->pCSLLData->serviceInfos, (void *)pCSLabel->pCurrentServiceInfo);    pCSLabel->pCurrentLabelOptions = pCSLabel->pCurrentServiceInfo->pLabelOptions;	return StateRet_OK;}PRIVATE StateRet_t ServiceInfo_getServiceId(CSParse_t * pCSParse, StateToken_t * pStateToken, char * token, char demark)

⌨️ 快捷键说明

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