Monotone-Parent: 20ebf3a5a63320cd182175f76e87a294bcbcffa3
Monotone-Revision: 9e18165e3392af8af437f5bf0e1146ac806d4210 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-10-08T12:43:43 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
b391953aa4
commit
b4f8503826
|
@ -1,3 +1,11 @@
|
|||
2010-10-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* NSString+NGCards.m (-unescapedFromCard): removed obsolete
|
||||
method.
|
||||
(-componentsWithSafeSeparator:): renamed to
|
||||
"vCardSubvaluesWithSeparator:" with proper unescaping of versit
|
||||
values by scanning each character one after another.
|
||||
|
||||
2010-09-28 Francis Lachapelle <flachapelle@inverse.ca>
|
||||
|
||||
* NSString+NGCards.m (-asCalendarDate): added handling of date that
|
||||
|
|
|
@ -211,7 +211,7 @@
|
|||
free (content);
|
||||
content = NULL;
|
||||
// NSLog (@"content: '%@'", s);
|
||||
contentValues = [s componentsWithSafeSeparator: ';'];
|
||||
contentValues = [s vCardSubvaluesWithSeparator: ';'];
|
||||
}
|
||||
else
|
||||
contentValues = nil;
|
||||
|
|
|
@ -34,14 +34,13 @@
|
|||
- (NSString *) foldedForVersitCards;
|
||||
- (NSArray *) asCardAttributeValues;
|
||||
- (NSString *) escapedForCards;
|
||||
- (NSString *) unescapedFromCard;
|
||||
- (NSString *) rfc822Email;
|
||||
|
||||
- (NSTimeInterval) durationAsTimeInterval;
|
||||
- (NSCalendarDate *) asCalendarDate;
|
||||
- (BOOL) isAllDayDate;
|
||||
|
||||
- (NSArray *) componentsWithSafeSeparator: (unichar) separator;
|
||||
- (NSArray *) vCardSubvaluesWithSeparator: (unichar) separator;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -118,27 +118,6 @@ static NSString *commaSeparator = nil;
|
|||
return string;
|
||||
}
|
||||
|
||||
- (NSString *) unescapedFromCard
|
||||
{
|
||||
NSString *string;
|
||||
|
||||
string = [self stringByReplacingString: @"\\,"
|
||||
withString: @","];
|
||||
string = [string stringByReplacingString: @"\\:"
|
||||
withString: @":"];
|
||||
string = [string stringByReplacingString: @"\\;"
|
||||
withString: @";"];
|
||||
string = [string stringByReplacingString: @"\\n"
|
||||
withString: @"\n"];
|
||||
string = [string stringByReplacingString: @"\\r"
|
||||
withString: @"\r"];
|
||||
string = [string stringByReplacingString: @"\\\\"
|
||||
withString: @"\\"];
|
||||
string = [string stringByReplacingString: @"\\N" // Outlook lameness
|
||||
withString: @"\n"];
|
||||
return string;
|
||||
}
|
||||
|
||||
- (NSTimeInterval) durationAsTimeInterval
|
||||
{
|
||||
/*
|
||||
|
@ -287,52 +266,73 @@ static NSString *commaSeparator = nil;
|
|||
return ([self length] == 8);
|
||||
}
|
||||
|
||||
- (NSArray *) componentsWithSafeSeparator: (unichar) separator
|
||||
- (NSArray *) vCardSubvaluesWithSeparator: (unichar) separator
|
||||
{
|
||||
NSMutableArray *components;
|
||||
NSRange currentRange;
|
||||
unichar *stringBuffer;
|
||||
unichar *stringBuffer, *substringBuffer;
|
||||
NSString *substring;
|
||||
unichar currentChar;
|
||||
unsigned int count, length;
|
||||
NSUInteger substringLength, count, max;
|
||||
BOOL escaped;
|
||||
|
||||
components = [NSMutableArray array];
|
||||
components = [NSMutableArray arrayWithCapacity: 5];
|
||||
|
||||
length = [self length];
|
||||
stringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * length);
|
||||
max = [self length];
|
||||
stringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * max);
|
||||
[self getCharacters: stringBuffer];
|
||||
substringLength = 0;
|
||||
|
||||
currentRange = NSMakeRange(0, 0);
|
||||
escaped = NO;
|
||||
count = 0;
|
||||
while (count < length)
|
||||
substringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * max);
|
||||
|
||||
for (count = 0; count < max; count++)
|
||||
{
|
||||
currentChar = stringBuffer[count];
|
||||
if (escaped)
|
||||
currentRange.length++;
|
||||
{
|
||||
escaped = NO;
|
||||
if (currentChar == 'n' || currentChar == 'N')
|
||||
substringBuffer[substringLength] = '\n';
|
||||
else if (currentChar == 'r')
|
||||
substringBuffer[substringLength] = '\r';
|
||||
else
|
||||
substringBuffer[substringLength] = currentChar;
|
||||
substringLength++;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentChar = *(stringBuffer + count);
|
||||
if (currentChar == '\\')
|
||||
escaped = YES;
|
||||
else if (currentChar == separator)
|
||||
{
|
||||
[components
|
||||
addObject: [self substringWithRange: currentRange]];
|
||||
currentRange = NSMakeRange (count + 1, 0);
|
||||
}
|
||||
else
|
||||
currentRange.length++;
|
||||
}
|
||||
count++;
|
||||
{
|
||||
if (currentChar == '\\')
|
||||
escaped = YES;
|
||||
else if (currentChar == separator)
|
||||
{
|
||||
substring
|
||||
= [[NSString alloc] initWithCharactersNoCopy: substringBuffer
|
||||
length: substringLength
|
||||
freeWhenDone: YES];
|
||||
[components addObject: substring];
|
||||
[substring release];
|
||||
substringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * max);
|
||||
substringLength = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
substringBuffer[substringLength] = currentChar;
|
||||
substringLength++;
|
||||
}
|
||||
}
|
||||
}
|
||||
[components
|
||||
addObject: [self substringWithRange: currentRange]];
|
||||
|
||||
substring = [[NSString alloc] initWithCharactersNoCopy: substringBuffer
|
||||
length: substringLength
|
||||
freeWhenDone: YES];
|
||||
[components addObject: substring];
|
||||
[substring release];
|
||||
|
||||
NSZoneFree (NULL, stringBuffer);
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
|
||||
- (NSString *) rfc822Email
|
||||
{
|
||||
unsigned idx;
|
||||
|
|
|
@ -381,7 +381,7 @@ static NSCharacterSet *whitespaceCharSet = nil;
|
|||
#endif
|
||||
|
||||
*attr_ = attrName;
|
||||
*value_ = [attrValue unescapedFromCard];
|
||||
*value_ = attrValue;
|
||||
}
|
||||
|
||||
- (SaxAttributes *) _mapAttrs: (NSArray *) _attrs
|
||||
|
@ -475,15 +475,12 @@ static NSCharacterSet *whitespaceCharSet = nil;
|
|||
NSString *testContent;
|
||||
|
||||
/* This is called for all non-BEGIN|END types. */
|
||||
testContent = [[_content unescapedFromCard] stringByReplacingString: @";"
|
||||
withString: @""];
|
||||
|
||||
testContent = [_content stringByReplacingString: @";" withString: @""];
|
||||
if ([[testContent stringByTrimmingSpaces] length] > 0)
|
||||
{
|
||||
[self _beginTag: _tagName group: _group withAttrs: _attrs];
|
||||
|
||||
a = [(VSSaxTag *)[VSSaxTag alloc]
|
||||
initWithContentString: [_content unescapedFromCard]];
|
||||
a = [(VSSaxTag *)[VSSaxTag alloc] initWithContentString: _content];
|
||||
if (a)
|
||||
{
|
||||
[elementList addObject: a];
|
||||
|
|
Loading…
Reference in New Issue