aboutsummaryrefslogtreecommitdiffstats
path: root/libversit
diff options
context:
space:
mode:
Diffstat (limited to 'libversit')
-rw-r--r--libversit/vcc.y41
1 files changed, 39 insertions, 2 deletions
diff --git a/libversit/vcc.y b/libversit/vcc.y
index fa314efeb5..26912a14dd 100644
--- a/libversit/vcc.y
+++ b/libversit/vcc.y
@@ -169,6 +169,7 @@ static void enterProps(const char *s);
static void enterAttr(const char *s1, const char *s2);
static void enterValues(const char *value);
static void mime_error_(char *s);
+ static void appendValue(const char *value);
%}
@@ -290,9 +291,9 @@ attr: name
name: ID
;
-values: value SEMICOLON { enterValues($1); } values
+values: value SEMICOLON { appendValue($1); } values
| value
- { enterValues($1); }
+ { appendValue($1); }
;
value: STRING
@@ -405,6 +406,41 @@ static VObject* popVObject()
return oldObj;
}
+static void appendValue(const char *value)
+{
+ char *p1, *p2;
+ wchar_t *p3;
+ int i;
+
+ if (fieldedProp && *fieldedProp) {
+ if (value) {
+ addPropValue(curProp, *fieldedProp, value);
+ }
+ /* else this field is empty, advance to next field */
+ fieldedProp++;
+ } else {
+ if (value) {
+ if (vObjectUStringZValue(curProp)) {
+ p1 = fakeCString(vObjectUStringZValue(curProp));
+ p2 = malloc(sizeof(char *) * (strlen(p1)+strlen(value)+1));
+ strcpy(p2, p1);
+ deleteStr(p1);
+
+ i = strlen(p2);
+ p2[i] = ';';
+ p2[i+1] = '\0';
+ p2 = strcat(p2, value);
+ p3 = (wchar_t *) vObjectUStringZValue(curProp);
+ free(p3);
+ setVObjectUStringZValue_(curProp,fakeUnicode(p2,0));
+ deleteStr(p2);
+ } else {
+ setVObjectUStringZValue_(curProp,fakeUnicode(value,0));
+ }
+ }
+ }
+ deleteStr(value);
+}
static void enterValues(const char *value)
{
@@ -1216,3 +1252,4 @@ static void mime_error_(char *s)
}
}
+