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

📄 cclqfile.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* * Copyright (c) 1995, the EUROPAGATE consortium (see below). * * The EUROPAGATE consortium members are: * *    University College Dublin *    Danmarks Teknologiske Videnscenter *    An Chomhairle Leabharlanna *    Consejo Superior de Investigaciones Cientificas * * Permission to use, copy, modify, distribute, and sell this software and * its documentation, in whole or in part, for any purpose, is hereby granted, * provided that: * * 1. This copyright and permission notice appear in all copies of the * software and its documentation. Notices of copyright or attribution * which appear at the beginning of any file must remain unchanged. * * 2. The names of EUROPAGATE or the project partners may not be used to * endorse or promote products derived from this software without specific * prior written permission. * * 3. Users of this software (implementors and gateway operators) agree to * inform the EUROPAGATE consortium of their use of the software. This * information will be used to evaluate the EUROPAGATE project and the * software, and to plan further developments. The consortium may use * the information in later publications. *  * 4. Users of this software agree to make their best efforts, when * documenting their use of the software, to acknowledge the EUROPAGATE * consortium, and the role played by the software in their work. * * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * USE OR PERFORMANCE OF THIS SOFTWARE. * *//* CCL qualifiers * Europagate, 1995 * * $Id: cclqfile.c,v 1.14 2003/06/23 10:22:21 adam Exp $ * * Old Europagate Log: * * Revision 1.3  1995/05/16  09:39:26  adam * LICENSE. * * Revision 1.2  1995/05/11  14:03:56  adam * Changes in the reading of qualifier(s). New function: ccl_qual_fitem. * New variable ccl_case_sensitive, which controls whether reserved * words and field names are case sensitive or not. * * Revision 1.1  1995/04/17  09:31:45  adam * Improved handling of qualifiers. Aliases or reserved words. * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <yaz/ccl.h>void ccl_qual_field (CCL_bibset bibset, const char *cp, const char *qual_name){    char qual_spec[128];    int type_ar[128];    int value_ar[128];    char *svalue_ar[128];    char *attsets[128];    int pair_no = 0;    while (pair_no < 128)    {        char *qual_value, *qual_type;        char *split, *setp;        int no_scan = 0;                if (sscanf (cp, "%100s%n", qual_spec, &no_scan) < 1)	    break;        if (!(split = strchr (qual_spec, '=')))        {	    /* alias specification .. */            if (pair_no == 0)            {                ccl_qual_add_combi (bibset, qual_name, cp);                return;            }            break;        }	/* [set,]type=value ... */        cp += no_scan;                *split++ = '\0';	setp = strchr (qual_spec, ',');	if (setp)	{	    /* set,type=value ... */	    *setp++ = '\0';            qual_type = setp;	}	else	{	    /* type=value ... */            qual_type = qual_spec;	}        while (pair_no < 128)        {            int type, value;            qual_value = split;            if ((split = strchr (qual_value, ',')))                *split++ = '\0';	    value = 0;            switch (qual_type[0])            {            case 'u':            case 'U':                type = CCL_BIB1_USE;                break;            case 'r':            case 'R':                type = CCL_BIB1_REL;                if (!ccl_stricmp (qual_value, "o"))                    value = CCL_BIB1_REL_ORDER;                break;                            case 'p':            case 'P':                type = CCL_BIB1_POS;                break;            case 's':            case 'S':                type = CCL_BIB1_STR;                if (!ccl_stricmp (qual_value, "pw"))                    value = CCL_BIB1_STR_WP;                if (!ccl_stricmp (qual_value, "al"))                    value = CCL_BIB1_STR_AND_LIST;                if (!ccl_stricmp (qual_value, "ol"))                    value = CCL_BIB1_STR_OR_LIST;                break;                            case 't':            case 'T':                type = CCL_BIB1_TRU;                if (!ccl_stricmp (qual_value, "l"))                    value = CCL_BIB1_TRU_CAN_LEFT;                else if (!ccl_stricmp (qual_value, "r"))                    value = CCL_BIB1_TRU_CAN_RIGHT;                else if (!ccl_stricmp (qual_value, "b"))                    value = CCL_BIB1_TRU_CAN_BOTH;                else if (!ccl_stricmp (qual_value, "n"))                    value = CCL_BIB1_TRU_CAN_NONE;                break;                            case 'c':            case 'C':                type = CCL_BIB1_COM;                break;            default:                type = atoi (qual_type);            }            type_ar[pair_no] = type;	    if (value)	    {		value_ar[pair_no] = value;		svalue_ar[pair_no] = 0;	    }	    else if (*qual_value >= '0' && *qual_value <= '9')	    {		value_ar[pair_no] = atoi (qual_value);		svalue_ar[pair_no] = 0;	    }	    else	    {		size_t len;		if (split)		    len = split - qual_value;		else		    len = strlen(qual_value);		svalue_ar[pair_no] = xmalloc(len+1);		memcpy(svalue_ar[pair_no], qual_value, len);		svalue_ar[pair_no][len] = '\0';	    }	    if (setp)	    {	        attsets[pair_no] = (char*) xmalloc (strlen(qual_spec)+1);	        strcpy (attsets[pair_no], qual_spec);	    }	    else	        attsets[pair_no] = 0;            pair_no++;            if (!split)                break;        }    }    ccl_qual_add_set (bibset, qual_name, pair_no, type_ar, value_ar, svalue_ar,		      attsets);}void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name){    if (*qual_name == '@')	ccl_qual_add_special(bibset, qual_name+1, cp);    else	ccl_qual_field(bibset, cp, qual_name);}/* * ccl_qual_file: Read bibset definition from file. * bibset:  Bibset * inf:     FILE pointer. * * Each line format is: *  <name> <t>=<v> <t>=<v> .... *  Where <name> is name of qualifier; *  <t>=<v> is a attribute definition pair where <t> is one of:  *     u(use), r(relation), p(position), t(truncation), c(completeness)  *     or plain integer. *  <v> is an integer or special pseudo-value. */void ccl_qual_file (CCL_bibset bibset, FILE *inf){    char line[256];    char *cp, *cp1;    char qual_name[128];    while (fgets (line, 255, inf))    {        int  no_scan = 0;        cp = line;        if (*cp == '#')            continue;        /* ignore lines starting with # */        if (sscanf (cp, "%100s%n", qual_name, &no_scan) < 1)            continue;        /* also ignore empty lines */        cp += no_scan;	cp1 = strchr(cp, '#');	if (cp1)	    *cp1 = '\0';        ccl_qual_fitem (bibset, cp, qual_name);    }}int ccl_qual_fname (CCL_bibset bibset, const char *fname){    FILE *inf;    inf = fopen (fname, "r");    if (!inf)        return -1;    ccl_qual_file (bibset, inf);    fclose (inf);    return 0;}

⌨️ 快捷键说明

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