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

📄 cslabel.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
📖 第 1 页 / 共 5 页
字号:
     {  "URL open", SubState_B, Punct_LPAREN,  &Extension_getURL, 0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN|Command_NOTOKEN, 0},     { "URL close", SubState_B, Punct_RPAREN,  &Extension_getURL, 0, 0, 0, 0, SubState_X, Command_CLOSE, &Extension_next},     { "more data", SubState_C, Punct_WHITE|Punct_LPAREN|Punct_RPAREN, &hasToken, 0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN, 0},     {      "nest", SubState_C, Punct_LPAREN,           0,         0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN, 0},     {     "close", SubState_C, Punct_RPAREN,           0,         0, 0, 0, 0, SubState_X, Command_CLOSE, &Extension_next}    };PRIVATE TargetObject_t Extension_targetObject = {"Extension", &Extension_open, &Extension_close, &Extension_destroy, Extension_stateTokens, raysize(Extension_stateTokens), CSLLTC_EXTEN};PRIVATE StateToken_t ExtensionData_stateTokens[] = {    /* A: looking for data        B: back from recursive ExtensionData (identical to Extension B) */     {      "open", SubState_N,    Punct_ALL,               0,        0, 0, 0, &ExtensionData_targetObject, SubState_A, Command_MATCHANY|Command_OPEN|Command_CHAIN, 0},     {    "lparen", SubState_A, Punct_LPAREN,                      0, 0, 0, 0, &ExtensionData_targetObject, SubState_N, 0, 0},     {     "close", SubState_A, Punct_RPAREN,                      0, 0, 0, 0, 0, SubState_X, Command_CLOSE, &ExtensionData_next},	 {      "data", SubState_A, Punct_WHITE, &ExtensionData_getData, 0, 0, 0, 0, SubState_X, Command_CLOSE, &ExtensionData_next},	 {"data punct", SubState_A, Punct_LPAREN|Punct_RPAREN, &ExtensionData_getData, 0, 0, 0, 0, SubState_X, Command_CLOSE|Command_CHAIN|Command_NOTOKEN, &ExtensionData_next},     { "more data", SubState_B, Punct_WHITE|Punct_LPAREN|Punct_RPAREN, &hasToken, 0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN, 0},     {      "nest", SubState_B, Punct_LPAREN,           0,         0, 0, 0, &ExtensionData_targetObject, SubState_N, Command_CHAIN, 0},	 {     "close", SubState_B, Punct_RPAREN,           0,         0, 0, 0, 0, SubState_X, Command_CLOSE, &ExtensionData_next}    };PRIVATE TargetObject_t ExtensionData_targetObject = {"ExtensionData", &ExtensionData_open, &ExtensionData_close, &ExtensionData_destroy, ExtensionData_stateTokens, raysize(ExtensionData_stateTokens), CSLLTC_EXTDATA};/* CSParse_doc end *//* S T A T E   A S S O C I A T I O N - associate a CSLabel with the label list data    The label list data is kept around until all states referencing it are destroyed */typedef struct {    CSLabel_t * pCSLabel;    CSLLData_t * pCSLLData;    } CSLabelAssoc_t;PRIVATE HTList * CSLabelAssocs = 0;PRIVATE void CSLabelAssoc_add(CSLabel_t * pCSLabel, CSLLData_t * pCSLLData){    CSLabelAssoc_t * pElement;    if ((pElement = (CSLabelAssoc_t *) HT_CALLOC(1, sizeof(CSLabelAssoc_t))) == NULL)        HT_OUTOFMEM("CSLabelAssoc_t");    pElement->pCSLabel = pCSLabel;    pElement->pCSLLData = pCSLLData;    if (!CSLabelAssocs)        CSLabelAssocs = HTList_new();    HTList_appendObject(CSLabelAssocs, (void *)pElement);}PRIVATE CSLabelAssoc_t * CSLabelAssoc_findByData(CSLLData_t * pCSLLData){    HTList * assocs = CSLabelAssocs;    CSLabelAssoc_t * pElement;    while ((pElement = (CSLabelAssoc_t *) HTList_nextObject(assocs)))        if (pElement->pCSLLData == pCSLLData)            return pElement;    return 0;}PRIVATE CSLabelAssoc_t * CSLabelAssoc_findByState(CSLabel_t * pCSLabel){    HTList * assocs = CSLabelAssocs;    CSLabelAssoc_t * pElement;    while ((pElement = (CSLabelAssoc_t *) HTList_nextObject(assocs)))        if (pElement->pCSLabel == pCSLabel)            return pElement;    return 0;}PRIVATE void CSLabelAssoc_removeByState(CSLabel_t * pCSLabel){    CSLabelAssoc_t * pElement = CSLabelAssoc_findByState(pCSLabel);    if (!pElement)        return;    HTList_removeObject(CSLabelAssocs, (void *)pElement);   HT_FREE(pElement);}/* P R I V A T E   C O N S T R U C T O R S / D E S T R U C T O R S *//* These serve the public constructors  */PRIVATE LabelError_t * LabelError_new(void){    LabelError_t * me;    if ((me = (LabelError_t *) HT_CALLOC(1, sizeof(LabelError_t))) == NULL)        HT_OUTOFMEM("LabelError_t");    me->explanations = HTList_new();    return me;}PRIVATE void LabelError_free(LabelError_t * me){    char * explanation;    if (!me)        return;    while ((explanation = (char *) HTList_removeLastObject(me->explanations)))        HT_FREE(explanation);    HT_FREE(me);}PRIVATE LabelOptions_t * LabelOptions_new(LabelOptions_t * pParentLabelOptions){    LabelOptions_t * me;    if ((me = (LabelOptions_t *) HT_CALLOC(1, sizeof(LabelOptions_t))) == NULL)        HT_OUTOFMEM("LabelOptions_t");    me->pParentLabelOptions = pParentLabelOptions;    return me;}PRIVATE void LabelOptions_free(LabelOptions_t * me){	char * comment;    DVal_clear(&me->at);    SVal_clear(&me->by);    SVal_clear(&me->complete_label);    BVal_clear(&me->generic);    SVal_clear(&me->fur);    SVal_clear(&me->MIC_md5);    DVal_clear(&me->on);    SVal_clear(&me->signature_PKCS);    DVal_clear(&me->until);    while ((comment = HTList_removeLastObject(me->comments)))	HT_FREE(comment);    HT_FREE(me);}PRIVATE ExtensionData_t * ExtensionData_new(void){    ExtensionData_t * me;    if ((me = (ExtensionData_t *) HT_CALLOC(1, sizeof(ExtensionData_t))) == NULL)        HT_OUTOFMEM("ExtensionData_t");    return me;}PRIVATE void ExtensionData_free(ExtensionData_t * me){    ExtensionData_t * pExtensionData;    while ((pExtensionData = (ExtensionData_t *) HTList_removeLastObject(me->moreData)))        ExtensionData_free(pExtensionData);    HT_FREE(me->text);    HT_FREE(me);}PRIVATE Extension_t * Extension_new(void){    Extension_t * me;    if ((me = (Extension_t *) HT_CALLOC(1, sizeof(Extension_t))) == NULL)        HT_OUTOFMEM("Extension_t");    return me;}PRIVATE void Extension_free(Extension_t * me){    ExtensionData_t * pExtensionData;    while ((pExtensionData = (ExtensionData_t *) HTList_removeLastObject(me->extensionData)))        ExtensionData_free(pExtensionData);    SVal_clear(&me->url);    HT_FREE(me);}PRIVATE LabelRating_t * LabelRating_new(void){    LabelRating_t * me;    if ((me = (LabelRating_t *) HT_CALLOC(1, sizeof(LabelRating_t))) == NULL)        HT_OUTOFMEM("LabelRating_t");/*  don't initialize HTList me->ranges as it may be just a value */    return me;}PRIVATE void LabelRating_free(LabelRating_t * me){    Range_t * pRange;    while ((pRange = (Range_t *) HTList_removeLastObject(me->ranges)))        HT_FREE(pRange);    SVal_clear(&me->identifier);    HT_FREE(me);}PRIVATE SingleLabel_t * SingleLabel_new(LabelOptions_t * pLabelOptions, LabelOptions_t * pParentLabelOptions){    SingleLabel_t * me;    if ((me = (SingleLabel_t *) HT_CALLOC(1, sizeof(SingleLabel_t))) == NULL)        HT_OUTOFMEM("SingleLabel_t");    me->labelRatings = HTList_new();    me->pLabelOptions = pLabelOptions ? pLabelOptions : LabelOptions_new(pParentLabelOptions);    return me;}PRIVATE void SingleLabel_free(SingleLabel_t * me){    LabelRating_t * pLabelRating;    while ((pLabelRating = (LabelRating_t *) HTList_removeLastObject(me->labelRatings)))        LabelRating_free(pLabelRating);    LabelOptions_free(me->pLabelOptions);    HT_FREE(me);}PRIVATE Label_t * Label_new(void){    Label_t * me;    if ((me = (Label_t *) HT_CALLOC(1, sizeof(Label_t))) == NULL)        HT_OUTOFMEM("Label_t");    /* dont initialize HTList me->singleLabels */    return me;}PRIVATE void Label_free(Label_t * me){    SingleLabel_t * pSingleLabel;    if (me->pSingleLabel)        SingleLabel_free(me->pSingleLabel);    else    /* if both of these are (erroneously) defined, mem checkers will pick it up */        while ((pSingleLabel = (SingleLabel_t *) HTList_removeLastObject(me->singleLabels)))            SingleLabel_free(pSingleLabel);    LabelError_free(me->pLabelError);    HT_FREE(me);}PRIVATE ServiceInfo_t * ServiceInfo_new(){    ServiceInfo_t * me;    if ((me = (ServiceInfo_t *) HT_CALLOC(1, sizeof(ServiceInfo_t))) == NULL)        HT_OUTOFMEM("ServiceInfo_t");    me->labels = HTList_new();    me->pLabelOptions = LabelOptions_new(0);    return me;}PRIVATE void ServiceInfo_free(ServiceInfo_t * me){    Label_t * pLabel;    while ((pLabel = (Label_t *) HTList_removeLastObject(me->labels)))        Label_free(pLabel);    SVal_clear(&me->rating_service);    LabelOptions_free(me->pLabelOptions);    LabelError_free(me->pLabelError);    HT_FREE(me);}PRIVATE CSLLData_t * CSLLData_new(void){    CSLLData_t * me;    if ((me = (CSLLData_t *) HT_CALLOC(1, sizeof(CSLLData_t))) == NULL)        HT_OUTOFMEM("CSLLData_t");    me->serviceInfos = HTList_new();    return me;}PRIVATE void CSLLData_free(CSLLData_t * me){    ServiceInfo_t * pServiceInfo;    if (CSLabelAssoc_findByData(me))        return;    while ((pServiceInfo = (ServiceInfo_t *) HTList_removeLastObject(me->serviceInfos)))        ServiceInfo_free(pServiceInfo);    FVal_clear(&me->version);    LabelError_free(me->pLabelError);    HT_FREE(me);}/* P U B L I C   C O N S T R U C T O R S / D E S T R U C T O R S */PUBLIC CSLabel_t * CSLabel_new(CSLLData_t * pCSLLData, LabelTargetCallback_t * pLabelTargetCallback, 								   LLErrorHandler_t * pLLErrorHandler){    CSLabel_t * me;    if ((me = (CSLabel_t *) HT_CALLOC(1, sizeof(CSLabel_t))) == NULL)        HT_OUTOFMEM("CSLabel_t");    me->pCSLLData = pCSLLData;    me->pLabelTargetCallback = pLabelTargetCallback;    me->pLLErrorHandler = pLLErrorHandler;    CSLabelAssoc_add(me, pCSLLData);    return me;}PUBLIC CSLabel_t * CSLabel_copy(CSLabel_t * old){    CSLabel_t * me = CSLabel_new(old->pCSLLData, old->pLabelTargetCallback, old->pLLErrorHandler);    memcpy(me, old, sizeof(CSLabel_t));    return me;}PUBLIC void CSLabel_free(CSLabel_t * me){    CSLLData_t * pCSLLData = me->pCSLLData;    CSLabelAssoc_removeByState(me);    HT_FREE(me);    CSLLData_free(pCSLLData);}PUBLIC CSLLData_t * CSLabel_getCSLLData(CSLabel_t * me)    {return me->pCSLLData;}PUBLIC LabelError_t * CSLabel_getLabelError(CSLabel_t * pCSLabel)    {return pCSLabel->pCurrentLabelError;}PUBLIC LabelOptions_t * CSLabel_getLabelOptions(CSLabel_t * pCSLabel)    {return pCSLabel->pCurrentLabelOptions;}PUBLIC ServiceInfo_t * CSLabel_getServiceInfo(CSLabel_t * pCSLabel)    {return pCSLabel->pCurrentServiceInfo;}PUBLIC char * CSLabel_getServiceName(CSLabel_t * pCSLabel)    {return pCSLabel->pCurrentServiceInfo ?        SVal_value(&pCSLabel->pCurrentServiceInfo->rating_service): 0;}PUBLIC Label_t * CSLabel_getLabel(CSLabel_t * pCSLabel)    {return pCSLabel->pCurrentLabel;}PUBLIC int CSLabel_getLabelNumber(CSLabel_t * pCSLabel)    {return pCSLabel->currentLabelNumber;}PUBLIC SingleLabel_t * CSLabel_getSingleLabel(CSLabel_t * pCSLabel)

⌨️ 快捷键说明

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