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];
/*
- Copyright (C) 2003-2004 Max Berger
- Copyright (C) 2004 OpenGroupware.org
-
- This file is part of versitSaxDriver, written for the OpenGroupware.org
- project (OGo).
-
- SOPE is free software; you can redistribute it and/or modify it under
- the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with SOPE; see the file COPYING. If not, write to the
- Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA.
- */
+ Copyright (C) 2003-2004 Max Berger
+ Copyright (C) 2004-2005 OpenGroupware.org
+
+ This file is part of versitSaxDriver, written for the OpenGroupware.org
+ project (OGo).
+
+ SOPE is free software; you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
+
+ SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with SOPE; see the file COPYING. If not, write to the
+ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+*/
#include "VSvCardSaxDriver.h"
#include "common.h"
didInit = YES;
defElementNames = [[NSSet alloc] initWithObjects:
- @"class",
- @"prodid",
- @"rev",
- @"uid",
- @"version",
- nil];
+ @"class", @"prodid", @"rev", @"uid", @"version", nil];
}
+ (NSDictionary *)xcardMapping {
| VERSION | version | CDATA | IMPLIED |
+----------------+------------+------------+----------------+
*/
- [xcard setObject:@"class" forKey:@"CLASS"];
- [xcard setObject:@"prodid" forKey:@"PRODID"];
- [xcard setObject:@"rev" forKey:@"REV"];
- [xcard setObject:@"uid" forKey:@"UID"];
+ [xcard setObject:@"class" forKey:@"CLASS"];
+ [xcard setObject:@"prodid" forKey:@"PRODID"];
+ [xcard setObject:@"rev" forKey:@"REV"];
+ [xcard setObject:@"uid" forKey:@"UID"];
[xcard setObject:@"version" forKey:@"VERSION"];
| BDAY | bday | PCDATA |
+----------------+------------+-----------------------------+
*/
- [xcard setObject:@"fn" forKey:@"FN"];
- [xcard setObject:@"n" forKey:@"N"];
+ [xcard setObject:@"fn" forKey:@"FN"];
+ [xcard setObject:@"n" forKey:@"N"];
[xcard setObject:@"nickname" forKey:@"NICKNAME"];
- [xcard setObject:@"photo" forKey:@"PHOTO"];
- [xcard setObject:@"bday" forKey:@"BDAY"];
+ [xcard setObject:@"photo" forKey:@"PHOTO"];
+ [xcard setObject:@"bday" forKey:@"BDAY"];
/*