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>
|
2010-09-28 Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
|
||||||
* NSString+NGCards.m (-asCalendarDate): added handling of date that
|
* NSString+NGCards.m (-asCalendarDate): added handling of date that
|
||||||
|
|
|
@ -211,7 +211,7 @@
|
||||||
free (content);
|
free (content);
|
||||||
content = NULL;
|
content = NULL;
|
||||||
// NSLog (@"content: '%@'", s);
|
// NSLog (@"content: '%@'", s);
|
||||||
contentValues = [s componentsWithSafeSeparator: ';'];
|
contentValues = [s vCardSubvaluesWithSeparator: ';'];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
contentValues = nil;
|
contentValues = nil;
|
||||||
|
|
|
@ -34,14 +34,13 @@
|
||||||
- (NSString *) foldedForVersitCards;
|
- (NSString *) foldedForVersitCards;
|
||||||
- (NSArray *) asCardAttributeValues;
|
- (NSArray *) asCardAttributeValues;
|
||||||
- (NSString *) escapedForCards;
|
- (NSString *) escapedForCards;
|
||||||
- (NSString *) unescapedFromCard;
|
|
||||||
- (NSString *) rfc822Email;
|
- (NSString *) rfc822Email;
|
||||||
|
|
||||||
- (NSTimeInterval) durationAsTimeInterval;
|
- (NSTimeInterval) durationAsTimeInterval;
|
||||||
- (NSCalendarDate *) asCalendarDate;
|
- (NSCalendarDate *) asCalendarDate;
|
||||||
- (BOOL) isAllDayDate;
|
- (BOOL) isAllDayDate;
|
||||||
|
|
||||||
- (NSArray *) componentsWithSafeSeparator: (unichar) separator;
|
- (NSArray *) vCardSubvaluesWithSeparator: (unichar) separator;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -118,27 +118,6 @@ static NSString *commaSeparator = nil;
|
||||||
return string;
|
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
|
- (NSTimeInterval) durationAsTimeInterval
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -287,52 +266,73 @@ static NSString *commaSeparator = nil;
|
||||||
return ([self length] == 8);
|
return ([self length] == 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSArray *) componentsWithSafeSeparator: (unichar) separator
|
- (NSArray *) vCardSubvaluesWithSeparator: (unichar) separator
|
||||||
{
|
{
|
||||||
NSMutableArray *components;
|
NSMutableArray *components;
|
||||||
NSRange currentRange;
|
unichar *stringBuffer, *substringBuffer;
|
||||||
unichar *stringBuffer;
|
NSString *substring;
|
||||||
unichar currentChar;
|
unichar currentChar;
|
||||||
unsigned int count, length;
|
NSUInteger substringLength, count, max;
|
||||||
BOOL escaped;
|
BOOL escaped;
|
||||||
|
|
||||||
components = [NSMutableArray array];
|
components = [NSMutableArray arrayWithCapacity: 5];
|
||||||
|
|
||||||
length = [self length];
|
max = [self length];
|
||||||
stringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * length);
|
stringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * max);
|
||||||
[self getCharacters: stringBuffer];
|
[self getCharacters: stringBuffer];
|
||||||
|
substringLength = 0;
|
||||||
|
|
||||||
currentRange = NSMakeRange(0, 0);
|
substringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * max);
|
||||||
escaped = NO;
|
|
||||||
count = 0;
|
for (count = 0; count < max; count++)
|
||||||
while (count < length)
|
|
||||||
{
|
{
|
||||||
|
currentChar = stringBuffer[count];
|
||||||
if (escaped)
|
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
|
else
|
||||||
{
|
{
|
||||||
currentChar = *(stringBuffer + count);
|
if (currentChar == '\\')
|
||||||
if (currentChar == '\\')
|
escaped = YES;
|
||||||
escaped = YES;
|
else if (currentChar == separator)
|
||||||
else if (currentChar == separator)
|
{
|
||||||
{
|
substring
|
||||||
[components
|
= [[NSString alloc] initWithCharactersNoCopy: substringBuffer
|
||||||
addObject: [self substringWithRange: currentRange]];
|
length: substringLength
|
||||||
currentRange = NSMakeRange (count + 1, 0);
|
freeWhenDone: YES];
|
||||||
}
|
[components addObject: substring];
|
||||||
else
|
[substring release];
|
||||||
currentRange.length++;
|
substringBuffer = NSZoneMalloc (NULL, sizeof (unichar) * max);
|
||||||
}
|
substringLength = 0;
|
||||||
count++;
|
}
|
||||||
|
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);
|
NSZoneFree (NULL, stringBuffer);
|
||||||
|
|
||||||
return components;
|
return components;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (NSString *) rfc822Email
|
- (NSString *) rfc822Email
|
||||||
{
|
{
|
||||||
unsigned idx;
|
unsigned idx;
|
||||||
|
|
|
@ -381,7 +381,7 @@ static NSCharacterSet *whitespaceCharSet = nil;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*attr_ = attrName;
|
*attr_ = attrName;
|
||||||
*value_ = [attrValue unescapedFromCard];
|
*value_ = attrValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SaxAttributes *) _mapAttrs: (NSArray *) _attrs
|
- (SaxAttributes *) _mapAttrs: (NSArray *) _attrs
|
||||||
|
@ -475,15 +475,12 @@ static NSCharacterSet *whitespaceCharSet = nil;
|
||||||
NSString *testContent;
|
NSString *testContent;
|
||||||
|
|
||||||
/* This is called for all non-BEGIN|END types. */
|
/* This is called for all non-BEGIN|END types. */
|
||||||
testContent = [[_content unescapedFromCard] stringByReplacingString: @";"
|
testContent = [_content stringByReplacingString: @";" withString: @""];
|
||||||
withString: @""];
|
|
||||||
|
|
||||||
if ([[testContent stringByTrimmingSpaces] length] > 0)
|
if ([[testContent stringByTrimmingSpaces] length] > 0)
|
||||||
{
|
{
|
||||||
[self _beginTag: _tagName group: _group withAttrs: _attrs];
|
[self _beginTag: _tagName group: _group withAttrs: _attrs];
|
||||||
|
|
||||||
a = [(VSSaxTag *)[VSSaxTag alloc]
|
a = [(VSSaxTag *)[VSSaxTag alloc] initWithContentString: _content];
|
||||||
initWithContentString: [_content unescapedFromCard]];
|
|
||||||
if (a)
|
if (a)
|
||||||
{
|
{
|
||||||
[elementList addObject: a];
|
[elementList addObject: a];
|
||||||
|
|
Loading…
Reference in New Issue