X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Frpnsearch.c;h=ec341d1717e46ff1369e2754c4348e9d099239c9;hb=7598c76f1a4989a91003bd4fbd90f30a7c7255ef;hp=8b63758ec20d563571173d73e90e478b40603b48;hpb=e1be1f5267e2be257664ded166b6890e4f24db83;p=idzebra-moved-to-github.git diff --git a/index/rpnsearch.c b/index/rpnsearch.c index 8b63758..ec341d1 100644 --- a/index/rpnsearch.c +++ b/index/rpnsearch.c @@ -1,8 +1,5 @@ -/* $Id: rpnsearch.c,v 1.31 2008-01-26 15:48:29 adam Exp $ - Copyright (C) 1995-2007 - Index Data ApS - -This file is part of the Zebra server. +/* This file is part of the Zebra server. + Copyright (C) 1995-2008 Index Data Zebra is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -1038,28 +1035,45 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, if (zebra_maps_is_icu(zm)) { - /* ICU case */ - switch (truncation_value) + int relation_value; + AttrType relation; + + attr_init_APT(&relation, zapt, 2); + relation_value = attr_find(&relation, NULL); + if (relation_value == 103) /* always matches */ + termp += strlen(termp); /* move to end of term */ + else if (relation_value == 3 || relation_value == 102 || relation_value == -1) { - case -1: /* not specified */ - case 100: /* do not truncate */ - if (!term_100_icu(zm, &termp, term_dict, space_split, display_term, 0)) - { - *term_sub = 0; - return ZEBRA_OK; - } - break; - case 1: /* right truncation */ - if (!term_100_icu(zm, &termp, term_dict, space_split, display_term, 1)) + /* ICU case */ + switch (truncation_value) { - *term_sub = 0; - return ZEBRA_OK; + case -1: /* not specified */ + case 100: /* do not truncate */ + if (!term_100_icu(zm, &termp, term_dict, space_split, display_term, 0)) + { + *term_sub = 0; + return ZEBRA_OK; + } + break; + case 1: /* right truncation */ + if (!term_100_icu(zm, &termp, term_dict, space_split, display_term, 1)) + { + *term_sub = 0; + return ZEBRA_OK; + } + break; + default: + zebra_setError_zint(zh, + YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE, + truncation_value); + return ZEBRA_FAIL; } - break; - default: + } + else + { zebra_setError_zint(zh, - YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE, - truncation_value); + YAZ_BIB1_UNSUPP_RELATION_ATTRIBUTE, + relation_value); return ZEBRA_FAIL; } }