- attr = g_new (AtkAttribute, 1);
- attr->name = g_strdup (key);
- attr->value = g_strdup (val);
- mrp->attributes = g_slist_prepend (mrp->attributes, attr);
+ p = q = val;
+ for (;;)
+ {
+ if (*q == '\0' || (*q == ':' && (q == val || q[-1] != '\\')))
+ {
+ char *tmp;
+ attr = g_new (AtkAttribute, 1);
+ attr->name = g_strdup (key);
+ attr->value = g_strdup (p);
+ attr->value[q - p] = '\0';
+ tmp = attr->value;
+ while (*tmp != '\0')
+ {
+ if (*tmp == '\\')
+ memmove (tmp, tmp + 1, strlen (tmp));
+ else
+ tmp++;
+ }
+ mrp->attributes = g_slist_prepend (mrp->attributes, attr);
+ if (*q == '\0')
+ break;
+ else
+ p = ++q;
+ }
+ else
+ q++;
+ }