+++ /dev/null
-/*
- Copyright (C) 2000-2004 SKYRIX Software AG
-
- This file is part of OGo
-
- OGo 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.
-
- OGo 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 OGo; see the file COPYING. If not, write to the
- Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA.
-*/
-// $Id$
-
-
-#import "NSString+iCal.h"
-
-
-@interface NSString (SOGoiCal_Private)
-- (NSString *)iCalCleanString;
-@end
-
-#include "common.h"
-
-@interface SOGoICalStringEscaper : NSObject <NGStringEscaping>
-{
-}
-+ (id)sharedEscaper;
-@end
-
-@implementation SOGoICalStringEscaper
-+ (id)sharedEscaper {
- static id sharedInstance = nil;
- if(!sharedInstance) {
- sharedInstance = [[self alloc] init];
- }
- return sharedInstance;
-}
-
-- (NSString *)stringByEscapingString:(NSString *)_s {
- unichar c;
-
- if(!_s || [_s length] == 0)
- return nil;
-
- c = [_s characterAtIndex:0];
- if(c == '\n') {
- return @"\\n";
- }
- else if(c == '\r') {
- return nil; /* effectively remove char */
- }
- return [NSString stringWithFormat:@"\\%@", _s];
-}
-
-@end
-
-@implementation NSString (SOGoiCal)
-
-#if 0
-- (NSString *)iCalFoldedString {
- /* RFC2445, 4.1 Content Lines
-
- The iCalendar object is organized into individual lines of text,
- called content lines. Content lines are delimited by a line break,
- which is a CRLF sequence (US-ASCII decimal 13, followed by US-ASCII
- decimal 10).
- Lines of text SHOULD NOT be longer than 75 octets, excluding the line
- break. Long content lines SHOULD be split into a multiple line
- representations using a line "folding" technique. That is, a long
- line can be split between any two characters by inserting a CRLF
- immediately followed by a single linear white space character (i.e.,
- SPACE, US-ASCII decimal 32 or HTAB, US-ASCII decimal 9).
- Any sequence of CRLF followed immediately by a single linear white space
- character is ignored (i.e., removed) when processing the content type.
- */
-}
-#endif
-
-/* strip off any characters from string which are not allowed in iCal */
-- (NSString *)iCalCleanString {
- static NSCharacterSet *replaceSet = nil;
-
- if(replaceSet == nil) {
- replaceSet = [NSCharacterSet characterSetWithCharactersInString:@"\r"];
- [replaceSet retain];
- }
-
- return [self stringByEscapingCharactersFromSet:replaceSet
- usingStringEscaping:[SOGoICalStringEscaper sharedEscaper]];
-}
-
-- (NSString *)iCalDQUOTESafeString {
- static NSCharacterSet *escapeSet = nil;
-
- if(escapeSet == nil) {
- escapeSet = [NSCharacterSet characterSetWithCharactersInString:@"\\\""];
- [escapeSet retain];
- }
- return [self iCalEscapedStringWithEscapeSet:escapeSet];
-}
-
-- (NSString *)iCalSafeString {
- static NSCharacterSet *escapeSet = nil;
-
- if(escapeSet == nil) {
- escapeSet = [NSCharacterSet characterSetWithCharactersInString:@"\n,;\\\""];
- [escapeSet retain];
- }
- return [self iCalEscapedStringWithEscapeSet:escapeSet];
-}
-
-/* Escape unsafe characters */
-- (NSString *)iCalEscapedStringWithEscapeSet:(NSCharacterSet *)_es {
- NSString *s;
-
- s = [self iCalCleanString];
- return [s stringByEscapingCharactersFromSet:_es
- usingStringEscaping:[SOGoICalStringEscaper sharedEscaper]];
-}
-
-@end