2 Copyright (C) 2000-2003 SKYRIX Software AG
4 This file is part of OGo
6 OGo is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with OGo; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include "NGMimeHeaderFieldParser.h"
24 #include "NGMimeHeaderFields.h"
25 #include "NGMimeUtilities.h"
27 #include <NGMime/NGMimePartParser.h>
29 @implementation NGMimeHeaderFieldParserSet
35 static NGMimeHeaderFieldParserSet *rfc822set = nil;
37 + (id)headerFieldParserSet {
38 return [[[self alloc] init] autorelease];
41 + (id)defaultRfc822HeaderFieldParserSet {
43 static NGMimeHeaderNames *Fields = NULL;
49 Fields = (NGMimeHeaderNames *)[NGMimePartParser headerFieldNames];
51 rfc822set = [[self alloc] init];
54 (parser = [[NGMimeContentTypeHeaderFieldParser alloc] init])
55 forField:Fields->contentType];
56 [parser release]; parser = nil;
59 (parser = [[NGMimeContentLengthHeaderFieldParser alloc] init])
60 forField:Fields->contentLength];
61 [parser release]; parser = nil;
64 (parser = [[NGMimeStringHeaderFieldParser alloc]
65 initWithRemoveComments:NO])
66 forField:Fields->received];
67 [parser release]; parser = nil;
70 (parser = [[NGMimeStringHeaderFieldParser alloc]
71 initWithRemoveComments:NO])
72 forField:Fields->subject];
73 [parser release]; parser = nil;
76 (parser = [[NGMimeStringHeaderFieldParser alloc]
77 initWithRemoveComments:NO])
79 [parser release]; parser = nil;
82 (parser = [[NGMimeContentDispositionHeaderFieldParser alloc]
84 forField:Fields->contentDisposition];
85 [parser release]; parser = nil;
87 (parser = [[NGMimeRFC822DateHeaderFieldParser alloc] init])
88 forField:Fields->date];
89 [parser release]; parser = nil;
95 return [self initWithDefaultParser:
96 [[[NGMimeStringHeaderFieldParser alloc] init] autorelease]];
98 - (id)initWithDefaultParser:(id<NGMimeHeaderFieldParser>)_parser {
99 if ((self = [super init])) {
100 self->fieldNameToParser = [[NSMutableDictionary alloc] initWithCapacity:32];
101 [self setDefaultParser:_parser];
105 - (id)initWithParseSet:(NGMimeHeaderFieldParserSet *)_set {
106 if ((self = [self initWithDefaultParser:[_set defaultParser]])) {
107 [self->fieldNameToParser addEntriesFromDictionary:_set->fieldNameToParser];
113 [self->fieldNameToParser release];
114 [self->defaultParser release];
120 - (void)setParser:(id<NGMimeHeaderFieldParser>)_parser
121 forField:(NSString *)_name {
123 [self->fieldNameToParser setObject:_parser forKey:_name];
126 - (void)setDefaultParser:(id<NGMimeHeaderFieldParser>)_parser {
127 ASSIGN(self->defaultParser, _parser);
129 - (id<NGMimeHeaderFieldParser>)defaultParser {
130 return self->defaultParser;
135 - (id)parseValue:(id)_data ofHeaderField:(NSString *)_field {
138 parser = [self->fieldNameToParser objectForKey:_field];
141 parser = [self defaultParser];
143 return [parser parseValue:_data ofHeaderField:_field];
148 - (id)copyWithZone:(NSZone *)_zone {
153 copy = [[NGMimeHeaderFieldParserSet allocWithZone:_zone]
154 initWithDefaultParser:
155 [self defaultParser]];
157 keys = [self->fieldNameToParser keyEnumerator];
158 while ((key = [keys nextObject])) {
159 id value = [self->fieldNameToParser objectForKey:key];
161 [copy setParser:value forField:key];
168 - (NSString *)description {
169 return [NSString stringWithFormat:
170 @"<HeaderFieldParserSet: id=0x%08X map=%@ default=%@>",
171 (unsigned)self, self->fieldNameToParser,
172 [self defaultParser]];
175 @end /* NGMimeHeaderFieldParserSet */