X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Frpnsearch.c;h=f119eb57dc918920a28c4e020eecba92cbbd78aa;hp=872cf8bbbf59f1c9ecb65bc8a12ec6be4b6a65ab;hb=b3f079a571e404665620e8eb3bb1dd7db1ff6669;hpb=a422a651d6d858ada4d3ec491404bd7f096b11aa diff --git a/index/rpnsearch.c b/index/rpnsearch.c index 872cf8b..f119eb5 100644 --- a/index/rpnsearch.c +++ b/index/rpnsearch.c @@ -237,7 +237,7 @@ static void add_non_space(const char *start, const char *end, static int term_100_icu(zebra_map_t zm, const char **src, WRBUF term_dict, int space_split, WRBUF display_term, - int right_trunc) + int mode) { int i; const char *res_buf = 0; @@ -251,7 +251,7 @@ static int term_100_icu(zebra_map_t zm, return 0; } wrbuf_write(display_term, display_buf, display_len); - if (right_trunc) + if (mode) { /* ICU sort keys seem to be of the form basechars \x01 accents \x01 length @@ -272,6 +272,8 @@ static int term_100_icu(zebra_map_t zm, } res_len = i; /* reduce res_len */ } + if (mode & 2) + wrbuf_puts(term_dict, ".*"); for (i = 0; i < res_len; i++) { if (strchr(REGEX_CHARS "\\", res_buf[i])) @@ -281,8 +283,11 @@ static int term_100_icu(zebra_map_t zm, wrbuf_putc(term_dict, res_buf[i]); } - if (right_trunc) + if (mode & 1) wrbuf_puts(term_dict, ".*"); + else if (mode) + wrbuf_puts(term_dict, "\x01\x01.*"); + return 1; } @@ -1055,6 +1060,20 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, return ZEBRA_OK; } break; + case 2: + if (!term_100_icu(zm, &termp, term_dict, space_split, display_term, 2)) + { + *term_sub = 0; + return ZEBRA_OK; + } + break; + case 3: + if (!term_100_icu(zm, &termp, term_dict, space_split, display_term, 3)) + { + *term_sub = 0; + return ZEBRA_OK; + } + break; default: zebra_setError_zint(zh, YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE,