/*
- 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.
+ Copyright (C) 2003-2004 Max Berger
+ Copyright (C) 2004-2005 OpenGroupware.org
- 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.
+ 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 "VSSaxDriver.h"
/* errors */
-- (void)error:(NSString *)_text {
+- (void)reportError:(NSString *)_text {
SaxParseException *e;
e = (id)[SaxParseException exceptionWithName:@"SaxParseException"
@" Tag '%@' has not been closed properly. Given "
@"document contains errors!",
mtName, expectedName, expectedName];
- [self error:s];
+ [self reportError:s];
/* probably futile attempt to parse anyways */
if (debugOn) {
}
else {
// TOOD: generate error?
- [self error:[@"found end tag without any open tags left: "
+ [self reportError:[@"found end tag without any open tags left: "
stringByAppendingString:mtName]];
}
[self _endTag:mtName];
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 error:[@"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.
/* is line well-formed? */
if (r.length == 0 || r.location == 0) {
- [self error:[@"got an improper content line! ->\n"
+ [self reportError:[@"got an improper content line! ->\n"
stringByAppendingString:_line]];
[tagAttributes release]; tagAttributes = nil;
return;
}
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];