Lines Matching refs:group

295 destroy_group(word_group_t **list, word_group_t *group) {
297 if (*list == group) {
298 *list = group->next;
302 while(group->prefixes) {
303 affix_t *next = group->prefixes->next;
304 free(group->prefixes->text);
305 free(group->prefixes);
306 group->prefixes=next;
308 while(group->suffixes) {
309 affix_t *next = group->suffixes->next;
310 free(group->suffixes->text);
311 free(group->suffixes);
312 group->suffixes=next;
314 while(group->words)
315 destroy_word(&group->words, group->words);
316 free(group->whitespace);
317 free(group->name);
318 free(group->sword);
319 free(group->join);
320 pcre_free(group->prefix_regexp);
321 pcre_free(group->word_regexp);
322 pcre_free(group->suffix_regexp);
323 ebitmap_destroy(&group->def);
324 free(group);
329 word_group_t *group = calloc(1, sizeof(word_group_t));
330 if (!group)
332 group->name = strdup(name);
333 if (!group->name) {
336 group->join = strdup(" ");
337 if (!group->join) {
340 group->whitespace = strdup(" ");
341 if (!group->whitespace) {
344 group->sword = NULL;
349 *list = group;
352 return group;
356 destroy_group(NULL, group);
429 add_word(word_group_t *group, char *raw, char *trans) {
434 word_t *word = create_word(&group->words, trans);
435 int rc = parse_ebitmap(&word->cat, &group->def, raw);
438 destroy_word(&group->words, word);
441 if (ebitmap_andnot(&word->normal, &word->cat, &group->def, maxbit) < 0)
445 if (ebitmap_xor(&temp, &word->cat, &group->def) < 0)
447 if (ebitmap_and(&word->inverse, &temp, &group->def) < 0)
725 static word_group_t *group;
780 group = NULL;
788 group = NULL;
791 if (!group &&
817 group = create_group(&domain->groups, tok);
818 if (!group)
822 if (update (&group->whitespace, tok) < 0)
825 if (update (&group->join, tok) < 0)
828 if (append (&group->prefixes, tok) < 0)
831 if (append (&group->suffixes, tok) < 0)
836 if (parse_ebitmap(&group->def, &empty, tok) < 0) {
840 } else if (group) {
841 if (add_word(group, raw, tok) < 0) {