// parses crit1=val1,crit2=val2|val3,... static struct database_criterion *create_database_criterion(NMEM m, const char *buf) { struct database_criterion *res = 0; char **values; int num; int i; if (!buf || !*buf) return 0; nmem_strsplit(m, ",", buf, &values, &num); for (i = 0; i < num; i++) { char **subvalues; int subnum; int subi; struct database_criterion *new = nmem_malloc(m, sizeof(*new)); char *eq; for (eq = values[i]; *eq; eq++) if (*eq == '=') { new->type = PAZPAR2_STRING_MATCH; break; } else if (*eq == '~')
// Decode settings parameters and apply to session // Syntax: setting[target]=value static int process_settings(struct session *se, struct http_request *rq, struct http_response *rs) { struct http_argument *a; for (a = rq->arguments; a; a = a->next) if (strchr(a->name, '[')) { char **res; int num; char *dbname; char *setting; // Nmem_strsplit *rules*!!! nmem_strsplit(se->session_nmem, "[]", a->name, &res, &num); if (num != 2) { error(rs, PAZPAR2_MALFORMED_SETTING, a->name); return -1; } setting = res[0]; dbname = res[1]; session_apply_setting(se, dbname, setting, nmem_strdup(se->session_nmem, a->value)); } return 0; }
Z_External *yaz_set_proposal_charneg_list(ODR o, const char *delim, const char *charset_list, const char *lang_list, int selected) { char **charsets_addresses = 0; char **langs_addresses = 0; int charsets_count = 0; int langs_count = 0; if (charset_list) nmem_strsplit(odr_getmem(o), delim, charset_list, &charsets_addresses, &charsets_count); if (lang_list) nmem_strsplit(odr_getmem(o), delim, lang_list, &langs_addresses, &langs_count); return yaz_set_proposal_charneg(o, (const char **) charsets_addresses, charsets_count, (const char **) langs_addresses, langs_count, selected); }
static void pull_terms(struct relevance *res, struct ccl_rpn_node *n) { char **words; int numwords; char *ccl_field; int i; switch (n->kind) { case CCL_RPN_AND: case CCL_RPN_OR: case CCL_RPN_NOT: case CCL_RPN_PROX: pull_terms(res, n->u.p[0]); pull_terms(res, n->u.p[1]); break; case CCL_RPN_TERM: nmem_strsplit(res->nmem, " ", n->u.t.term, &words, &numwords); for (i = 0; i < numwords; i++) { const char *norm_str; ccl_field = nmem_strdup_null(res->nmem, n->u.t.qual); pp2_charset_token_first(res->prt, words[i], 0); while ((norm_str = pp2_charset_token_next(res->prt))) { struct word_entry **e = &res->entries; while (*e) e = &(*e)->next; *e = nmem_malloc(res->nmem, sizeof(**e)); (*e)->norm_str = nmem_strdup(res->nmem, norm_str); (*e)->ccl_field = ccl_field; (*e)->termno = res->vec_len++; (*e)->display_str = nmem_strdup(res->nmem, words[i]); (*e)->next = 0; } } break; default: break; } }
normalize_record_t normalize_record_create(struct conf_service *service, const char *spec) { NMEM nmem = nmem_create(); normalize_record_t nt = nmem_malloc(nmem, sizeof(*nt)); struct normalize_step **m = &nt->steps; int no_errors = 0; int embed = 0; if (*spec == '<') embed = 1; nt->nmem = nmem; if (embed) { xmlDoc *xsp_doc = xmlParseMemory(spec, strlen(spec)); if (!xsp_doc) no_errors++; { *m = nmem_malloc(nt->nmem, sizeof(**m)); (*m)->marcmap = NULL; (*m)->stylesheet = NULL; (*m)->stylesheet2 = NULL; (*m)->stylesheet = xsltParseStylesheetDoc(xsp_doc); if (!(*m)->stylesheet) no_errors++; m = &(*m)->next; } } else { struct conf_config *conf = service->server->config; int i, num; char **stylesheets; nmem_strsplit(nt->nmem, ",", spec, &stylesheets, &num); for (i = 0; i < num; i++) { WRBUF fname = conf_get_fname(conf, stylesheets[i]); *m = nmem_malloc(nt->nmem, sizeof(**m)); (*m)->marcmap = NULL; (*m)->stylesheet = NULL; (*m)->stylesheet2 = service_xslt_get(service, stylesheets[i]); if ((*m)->stylesheet2) ; else if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-4], ".xsl")) { if (!((*m)->stylesheet = xsltParseStylesheetFile((xmlChar *) wrbuf_cstr(fname)))) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Unable to load stylesheet: %s", stylesheets[i]); no_errors++; } } else if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-5], ".mmap")) { if (!((*m)->marcmap = marcmap_load(wrbuf_cstr(fname), nt->nmem))) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Unable to load marcmap: %s", stylesheets[i]); no_errors++; } } else { yaz_log(YLOG_FATAL, "Cannot handle stylesheet: %s", stylesheets[i]); no_errors++; } wrbuf_destroy(fname); m = &(*m)->next; } } *m = 0; /* terminate list of steps */ if (no_errors) { normalize_record_destroy(nt); nt = 0; } return nt; }