+static void extract_token_add2_index(ZebraHandle zh, zebra_index_type_t type,
+ RecWord *p)
+{
+ struct it_key key;
+ const char *res_buf = 0;
+ size_t res_len = 0;
+ int r = zebra_index_type_tokenize(type, p->term_buf, p->term_len,
+ &res_buf, &res_len);
+ int cat = zinfo_index_category_index;
+ int ch = zebraExplain_lookup_attr_str(zh->reg->zei, cat, p->index_type, p->index_name);
+ if (ch < 0)
+ ch = zebraExplain_add_attr_str(zh->reg->zei, cat, p->index_type, p->index_name);
+ while (r)
+ {
+ int i = 0;
+ key.mem[i++] = ch;
+ key.mem[i++] = p->record_id;
+ key.mem[i++] = p->section_id;
+
+ if (zh->m_segment_indexing)
+ key.mem[i++] = p->segment;
+ key.mem[i++] = p->seqno;
+ key.len = i;
+
+ yaz_log(YLOG_LOG, "keys_write %.*s", (int) res_len, res_buf);
+ zebra_rec_keys_write(zh->reg->keys, res_buf, res_len, &key);
+
+ p->seqno++;
+ r = zebra_index_type_tokenize(type, 0, 0, &res_buf, &res_len);
+ }
+}
+
+static void extract_token_add2(RecWord *p)
+{
+ ZebraHandle zh = p->extractCtrl->handle;
+ zebra_index_type_t type = zebra_index_type_get(zh->reg->index_types, p->index_type);
+ if (type)
+ {
+ if (zebra_index_type_is_index(type))
+ {
+ extract_token_add2_index(zh, type, p);
+ }
+ else if (zebra_index_type_is_sort(type))
+ {
+ ;
+
+ }
+ }
+}
+
+/** \brief top-level indexing handler for recctrl system
+ \param p token data to be indexed
+
+ Call sequence:
+ extract_token
+ zebra_add_{in}_complete
+ extract_add_string
+
+ extract_add_index_string
+ or
+ extract_add_sort_string
+ or
+ extract_add_staticrank_string
+
+*/