void mc_add_keyword (unichar *usz, int rid, const char *grp, rc_uint_type nv, unichar *sv) { mc_keyword *p, *c, *n; size_t len = unichar_len (usz); c = keyword_top; p = NULL; while (c != NULL) { if (c->len > len) break; if (c->len == len) { int e = memcmp (usz, c->usz, len * sizeof (unichar)); if (e < 0) break; if (! e) { if (! strcmp (grp, "keyword") || strcmp (c->group_name, grp) != 0) fatal (_("Duplicate symbol entered into keyword list.")); c->rid = rid; c->nval = nv; c->sval = (!sv ? NULL : unichar_dup (sv)); if (! strcmp (grp, "language")) { const wind_language_t *lag = wind_find_language_by_id ((unsigned) nv); if (lag == NULL) fatal ("Language ident 0x%lx is not resolvable.\n", (long) nv); memcpy (&c->lang_info, lag, sizeof (*lag)); } return; } } c = (p = c)->next; } n = xmalloc (sizeof (mc_keyword)); n->next = c; n->len = len; n->group_name = grp; n->usz = usz; n->rid = rid; n->nval = nv; n->sval = (!sv ? NULL : unichar_dup (sv)); if (! strcmp (grp, "language")) { const wind_language_t *lag = wind_find_language_by_id ((unsigned) nv); if (lag == NULL) fatal ("Language ident 0x%lx is not resolvable.\n", (long) nv); memcpy (&n->lang_info, lag, sizeof (*lag)); } if (! p) keyword_top = n; else p->next = n; }
void mc_set_content (const unichar *src) { if (!src) return; input_stream = input_stream_pos = unichar_dup (src); }
static unichar * get_diff (unichar *end, unichar *start) { unichar *ret; unichar save = *end; *end = 0; ret = unichar_dup (start); *end = save; return ret; }
unichar * unichar_dup_uppercase (const unichar *u) { unichar *r = unichar_dup (u); int i; if (! r) return NULL; for (i = 0; r[i] != 0; ++i) { if (r[i] >= 'a' && r[i] <= 'z') r[i] &= 0xdf; } return r; }