- case -1: /* not specified */
- case 100: /* do not truncate */
- if (!string_relation(zh, zapt, &termp, term_dict,
- attributeSet,
- reg_type, space_split, term_dst,
- &relation_error))
- {
- if (relation_error)
- {
- zebra_setError(zh, relation_error, 0);
- return ZEBRA_FAIL;
- }
- *term_sub = 0;
- return ZEBRA_OK;
- }
- break;
- case 1: /* right truncation */
- term_dict[j++] = '(';
- if (!term_100(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ".*)");
- break;
- case 2: /* keft truncation */
- term_dict[j++] = '('; term_dict[j++] = '.'; term_dict[j++] = '*';
- if (!term_100(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ")");
- break;
- case 3: /* left&right truncation */
- term_dict[j++] = '('; term_dict[j++] = '.'; term_dict[j++] = '*';
- if (!term_100(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ".*)");
- break;
- case 101: /* process # in term */
- term_dict[j++] = '(';
- if (!term_101(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ")");
- break;
- case 102: /* Regexp-1 */
- term_dict[j++] = '(';
- if (!term_102(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ")");
- break;
- case 103: /* Regexp-2 */
- regex_range = 1;
- term_dict[j++] = '(';
- if (!term_103(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, ®ex_range,
- space_split, term_dst))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ")");
- break;
- case 104: /* process # and ! in term */
- term_dict[j++] = '(';
- if (!term_104(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ")");
- break;
- case 105: /* process * and ! in term */
- term_dict[j++] = '(';
- if (!term_105(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst, 1))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ")");
- break;
- case 106: /* process * and ! in term */
- term_dict[j++] = '(';
- if (!term_105(zh->reg->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst, 0))
- {
- *term_sub = 0;
- return ZEBRA_OK;
- }
- strcat(term_dict, ")");
- break;
- default:
- zebra_setError_zint(zh,
- YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE,
- truncation_value);
- return ZEBRA_FAIL;