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

📄 logrpn.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* * Copyright (C) 1995-2003, Index Data * All rights reserved. * * $Id: logrpn.c,v 1.11 2003/02/27 19:56:00 adam Exp $ */#include <stdio.h>#include <yaz/log.h>#include <yaz/logrpn.h>static const char *relToStr(int v){    const char *str = 0;    switch (v)    {    case 1: str = "Less than"; break;    case 2: str = "Less than or equal"; break;    case 3: str = "Equal"; break;    case 4: str = "Greater or equal"; break;    case 5: str = "Greater than"; break;    case 6: str = "Not equal"; break;    case 100: str = "Phonetic"; break;    case 101: str = "Stem"; break;    case 102: str = "Relevance"; break;    case 103: str = "AlwaysMatches"; break;    }    return str;}static void attrStr (int type, int value, enum oid_value ast, char *str){    const char *rstr;    *str = '\0';    switch (ast)    {    case VAL_BIB1:    case VAL_EXP1:    case VAL_GILS:        switch (type)        {        case 1:            sprintf (str, "use");            break;        case 2:            rstr = relToStr(value);            if (rstr)                sprintf (str, "relation=%s", rstr);            else                sprintf (str, "relation=%d", value);            break;        case 3:            switch (value)            {            case 1:                sprintf (str, "position=First in field");                break;            case 2:                sprintf (str, "position=First in any subfield");                break;            case 3:                sprintf (str, "position=Any position in field");                break;            default:                sprintf (str, "position");            }            break;        case 4:            switch (value)            {            case 1:                sprintf (str, "structure=Phrase");                break;            case 2:                sprintf (str, "structure=Word");                break;            case 3:                sprintf (str, "structure=Key");                break;            case 4:                sprintf (str, "structure=Year");                break;            case 5:                sprintf (str, "structure=Date");                break;            case 6:                sprintf (str, "structure=Word list");                break;            case 100:                sprintf (str, "structure=Date (un)");                break;            case 101:                sprintf (str, "structure=Name (norm)");                break;            case 102:                sprintf (str, "structure=Name (un)");                break;            case 103:                sprintf (str, "structure=Structure");                break;            case 104:                sprintf (str, "structure=urx");                break;            case 105:                sprintf (str, "structure=free-form-text");                break;            case 106:                sprintf (str, "structure=document-text");                break;            case 107:                sprintf (str, "structure=local-number");                break;            case 108:                sprintf (str, "structure=string");                break;            case 109:                sprintf (str, "structure=numeric string");                break;            default:                sprintf (str, "structure");            }            break;        case 5:            switch (value)            {            case 1:                sprintf (str, "truncation=Right");                break;            case 2:                sprintf (str, "truncation=Left");                break;            case 3:                sprintf (str, "truncation=Left&right");                break;            case 100:                sprintf (str, "truncation=Do not truncate");                break;            case 101:                sprintf (str, "truncation=Process #");                break;            case 102:                sprintf (str, "truncation=re-1");                break;            case 103:                sprintf (str, "truncation=re-2");                break;            case 104:                sprintf (str, "truncation=CCL");                break;            default:                sprintf (str, "truncation");            }            break;        case 6:            switch (value)            {            case 1:                sprintf (str, "completeness=Incomplete subfield");                break;            case 2:                sprintf (str, "completeness=Complete subfield");                break;            case 3:                sprintf (str, "completeness=Complete field");                break;            default:                sprintf (str, "completeness");            }            break;        }        break;    default:        break;    }    if (*str)        sprintf (str + strlen(str), " (%d=%d)", type, value);    else        sprintf (str, "%d=%d", type, value);}/* * zlog_attributes: print attributes of term */static void zlog_attributes (Z_AttributesPlusTerm *t, int level,                             enum oid_value ast){    int of, i;    char str[80];    int num_attributes = t->attributes->num_attributes;        for (of = 0; of < num_attributes; of++)    {	const char *attset_name = "";        Z_AttributeElement *element;	element = t->attributes->attributes[of];	if (element->attributeSet)	{	    oident *attrset;	    attrset = oid_getentbyoid (element->attributeSet);	    attset_name = attrset->desc;	}        switch (element->which)         {        case Z_AttributeValue_numeric:	    attrStr (*element->attributeType,		     *element->value.numeric, ast, str);            yaz_log (LOG_LOG, "%*.0s%s %s", level, "", attset_name, str);            break;        case Z_AttributeValue_complex:            yaz_log (LOG_LOG, "%*.0s%s attributeType=%d complex",		  level, "", attset_name, *element->attributeType);            for (i = 0; i<element->value.complex->num_list; i++)            {                if (element->value.complex->list[i]->which ==                    Z_StringOrNumeric_string)                    yaz_log (LOG_LOG, "%*.0s  string: '%s'", level, "",			     element->value.complex->list[i]->u.string);                else if (element->value.complex->list[i]->which ==                         Z_StringOrNumeric_numeric)                    yaz_log (LOG_LOG, "%*.0s  numeric: '%d'", level, "",			     *element->value.complex->list[i]->u.numeric);            }            break;        default:            yaz_log (LOG_LOG, "%.*s%s attribute unknown",		     level, "", attset_name);        }    }}static void zlog_structure (Z_RPNStructure *zs, int level, enum oid_value ast){    if (zs->which == Z_RPNStructure_complex)    {        Z_Operator *op = zs->u.complex->roperator;        const char *rstr = 0;        const char *unit = "private";        switch (op->which)        {        case Z_Operator_and:            yaz_log (LOG_LOG, "%*.0s and", level, "");            break;        case Z_Operator_or:            yaz_log (LOG_LOG, "%*.0s or", level, "");            break;        case Z_Operator_and_not:            yaz_log (LOG_LOG, "%*.0s and-not", level, "");            break;	case Z_Operator_prox:            if (op->u.prox->which == Z_ProximityOperator_known)            {                switch(*op->u.prox->u.known)                {                case Z_ProxUnit_character: unit = "character"; break;                case Z_ProxUnit_word: unit = "word"; break;                case Z_ProxUnit_sentence: unit = "sentence"; break;                case Z_ProxUnit_paragraph: unit = "paragraph"; break;                case Z_ProxUnit_section: unit = "section"; break;                case Z_ProxUnit_chapter: unit = "chapter"; break;                case Z_ProxUnit_document: unit = "document"; break;                case Z_ProxUnit_element: unit = "element"; break;                case Z_ProxUnit_subelement: unit = "subelement"; break;                case Z_ProxUnit_elementType: unit = "elementType"; break;                case Z_ProxUnit_byte: unit = "byte"; break;                default: unit = "unknown"; break;                }            }            rstr = relToStr(*op->u.prox->relationType);            yaz_log (LOG_LOG, "%*.0s prox excl=%s dist=%d order=%s "                     "rel=%s unit=%s",                     level, "", op->u.prox->exclusion ?                     (*op->u.prox->exclusion ? "T" : "F") : "N",                      *op->u.prox->distance,                     *op->u.prox->ordered ? "T" : "F",                     rstr ? rstr : "unknown",                     unit);	    break;        default:            yaz_log (LOG_LOG, "%*.0s unknown complex", level, "");            return;        }        zlog_structure (zs->u.complex->s1, level+2, ast);        zlog_structure (zs->u.complex->s2, level+2, ast);    }    else if (zs->which == Z_RPNStructure_simple)    {        if (zs->u.simple->which == Z_Operand_APT)        {            Z_AttributesPlusTerm *zapt = zs->u.simple->u.attributesPlusTerm;            switch (zapt->term->which)            {            case Z_Term_general:                yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "",			 zapt->term->u.general->len,			 zapt->term->u.general->buf);                break;            case Z_Term_characterString:                yaz_log (LOG_LOG, "%*.0s term '%s' (string)", level, "",			 zapt->term->u.characterString);                break;            case Z_Term_numeric:                yaz_log (LOG_LOG, "%*.0s term '%d' (numeric)", level, "",			 *zapt->term->u.numeric);                break;            case Z_Term_null:                yaz_log (LOG_LOG, "%*.0s term (null)", level, "");                break;            default:                yaz_log (LOG_LOG, "%*.0s term (not general)", level, "");            }            zlog_attributes (zapt, level+2, ast);        }        else if (zs->u.simple->which == Z_Operand_resultSetId)        {            yaz_log (LOG_LOG, "%*.0s set '%s'", level, "",		     zs->u.simple->u.resultSetId);        }        else            yaz_log (LOG_LOG, "%*.0s unknown simple structure", level, "");    }    else        yaz_log (LOG_LOG, "%*.0s unknown structure", level, "");}void log_rpn_query (Z_RPNQuery *rpn){    oident *attrset;    enum oid_value ast;        attrset = oid_getentbyoid (rpn->attributeSetId);    if (attrset)    {        ast = attrset->value;	yaz_log (LOG_LOG, "RPN query. Type: %s", attrset->desc);    }     else    {	ast = VAL_NONE;	yaz_log (LOG_LOG, "RPN query. Unknown type");    }    zlog_structure (rpn->RPNStructure, 0, ast);}void log_scan_term (Z_AttributesPlusTerm *zapt, oid_value ast){    int level = 0;    if (zapt->term->which == Z_Term_general)     {	yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "",		 zapt->term->u.general->len, zapt->term->u.general->buf);    }    else	yaz_log (LOG_LOG, "%*.0s term (not general)", level, "");    zlog_attributes (zapt, level+2, ast);}void yaz_log_zquery (Z_Query *q){    switch (q->which)    {    case Z_Query_type_1: case Z_Query_type_101:	log_rpn_query (q->u.type_1);        break;    case Z_Query_type_104:        if (q->u.type_104->which == Z_External_CQL)            yaz_log (LOG_LOG, "CQL: %s", q->u.type_104->u.cql);    }}

⌨️ 快捷键说明

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