NSMutableArray *tagAttributes;
NSRange r, todoRange;
unsigned length;
+
+#if 0
+ if (debugOn)
+ NSLog(@"%s: parse line: '%@'", __PRETTY_FUNCTION__, _line);
+#endif
length = [_line length];
todoRange = NSMakeRange(0, length);
options:0
range:todoRange];
/* is line well-formed? */
- if (r.length == 0) {
- [self reportError:[@"got an improper content line! ->\n"
- stringByAppendingString:_line]];
+ if (r.length == 0 || r.location == 0) {
+ NSLog(@"todo-range: %i-%i, range: %i-%i, length %i, str-class %@",
+ todoRange.location, todoRange.length,
+ r.location, r.length,
+ length, NSStringFromClass([_line class]));
+
+ [self reportError:
+ [@"got an improper content line! (did not find colon) ->\n"
+ stringByAppendingString:_line]];
return;
}
tagName = [[_line substringToIndex:r.location] uppercaseString];
tagAttributes = [[NSMutableArray alloc] initWithCapacity:16];
+ if (debugOn && ([tagName length] == 0)) {
+ [self reportError:[@"got an improper content line! ->\n"
+ stringByAppendingString:_line]];
+ return;
+ }
+
/*
possible shortcut: if we spotted a ':', we don't have to do "expensive"
argument scanning/processing.
}
tagValue = [_line substringFromIndex:NSMaxRange(r)];
+ if (debugOn && ([tagName length] == 0)) {
+ NSLog(@"%s: missing tagname in line: '%@'",
+ __PRETTY_FUNCTION__, _line);
+ }
+
/*
At this point we have:
- name: 'BEGIN', 'TEL', 'EMAIL', 'ITEM1.ADR' etc
- value: ';;;Magdeburg;;;Germany'
- atributes: ("type=INTERNET", "type=HOME", "type=pref")
+ name: 'BEGIN', 'TEL', 'EMAIL', 'ITEM1.ADR' etc
+ value: ';;;Magdeburg;;;Germany'
+ attributes: ("type=INTERNET", "type=HOME", "type=pref")
*/
+
+#if 0
+# warning DEBUG LOG ENABLED
+ NSLog(@"TAG: %@, value %@ attrs %@",
+ tagName, tagValue, tagAttributes);
+#endif
/* process tag */
[self _endComponent:tagName value:tagValue];
}
else {
- // TODO: make this more generic, this one is used with Outlook vCards
+ /* a regular content tag */
+
+ /*
+ check whether the tga value is encoded in quoted printable,
+ this one is used with Outlook vCards (see data/ for examples)
+ */
+ // TODO: make the encoding check more generic
if ([tagAttributes containsObject:@"ENCODING=QUOTED-PRINTABLE"]) {
// TODO: QP is charset specific! The one below decodes in Unicode!
tagValue = [tagValue stringByDecodingQuotedPrintable];