]> err.no Git - sope/blob - sope-mime/NGMime/NGMimeHeaderFieldParserSet.m
minor code cleanups
[sope] / sope-mime / NGMime / NGMimeHeaderFieldParserSet.m
1 /*
2   Copyright (C) 2000-2003 SKYRIX Software AG
3
4   This file is part of OGo
5
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
9   later version.
10
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.
15
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
19   02111-1307, USA.
20 */
21 // $Id$
22
23 #include "NGMimeHeaderFieldParser.h"
24 #include "NGMimeHeaderFields.h"
25 #include "NGMimeUtilities.h"
26 #include "common.h"
27 #include <NGMime/NGMimePartParser.h>
28
29 @implementation NGMimeHeaderFieldParserSet
30
31 + (int)version {
32   return 2;
33 }
34
35 static NGMimeHeaderFieldParserSet *rfc822set = nil;
36
37 + (id)headerFieldParserSet {
38   return [[[self alloc] init] autorelease];
39 }
40
41 + (id)defaultRfc822HeaderFieldParserSet {
42   id parser = nil;
43   static NGMimeHeaderNames *Fields = NULL;
44   
45   if (rfc822set)
46     return rfc822set;
47   
48   if (Fields == NULL)
49     Fields = (NGMimeHeaderNames *)[NGMimePartParser headerFieldNames];
50     
51   rfc822set = [[self alloc] init];
52
53   [rfc822set setParser:
54                  (parser = [[NGMimeContentTypeHeaderFieldParser alloc] init])
55              forField:Fields->contentType];
56   [parser release]; parser = nil;
57     
58   [rfc822set setParser:
59                (parser = [[NGMimeContentLengthHeaderFieldParser alloc] init])
60              forField:Fields->contentLength];
61   [parser release]; parser = nil;
62     
63   [rfc822set setParser:
64                (parser = [[NGMimeStringHeaderFieldParser alloc]
65                            initWithRemoveComments:NO])
66              forField:Fields->received];
67   [parser release]; parser = nil;
68     
69   [rfc822set setParser:
70                  (parser = [[NGMimeStringHeaderFieldParser alloc]
71                                  initWithRemoveComments:NO])
72              forField:Fields->subject];
73   [parser release]; parser = nil;
74     
75   [rfc822set setParser:
76                  (parser = [[NGMimeStringHeaderFieldParser alloc]
77                                  initWithRemoveComments:NO])
78              forField:@"x-face"];
79   [parser release]; parser = nil;
80
81   [rfc822set setParser:
82                (parser = [[NGMimeContentDispositionHeaderFieldParser alloc] 
83                            init])
84              forField:Fields->contentDisposition];
85   [parser release]; parser = nil;
86   [rfc822set setParser:
87                (parser = [[NGMimeRFC822DateHeaderFieldParser alloc] init])
88              forField:Fields->date];
89   [parser release]; parser = nil;
90   
91   return rfc822set;
92 }
93
94 - (id)init {
95   return [self initWithDefaultParser:
96                  [[[NGMimeStringHeaderFieldParser alloc] init] autorelease]];
97 }
98 - (id)initWithDefaultParser:(id<NGMimeHeaderFieldParser>)_parser {
99   if ((self = [super init])) {
100     self->fieldNameToParser = [[NSMutableDictionary alloc] initWithCapacity:32];
101     [self setDefaultParser:_parser];
102   }
103   return self;
104 }
105 - (id)initWithParseSet:(NGMimeHeaderFieldParserSet *)_set {
106   if ((self = [self initWithDefaultParser:[_set defaultParser]])) {
107     [self->fieldNameToParser addEntriesFromDictionary:_set->fieldNameToParser];
108   }
109   return self;
110 }
111
112 - (void)dealloc {
113   [self->fieldNameToParser release];
114   [self->defaultParser     release];
115   [super dealloc];
116 }
117
118 // accessors
119
120 - (void)setParser:(id<NGMimeHeaderFieldParser>)_parser
121   forField:(NSString *)_name {
122
123   [self->fieldNameToParser setObject:_parser forKey:_name];
124 }
125
126 - (void)setDefaultParser:(id<NGMimeHeaderFieldParser>)_parser {
127   ASSIGN(self->defaultParser, _parser);
128 }
129 - (id<NGMimeHeaderFieldParser>)defaultParser {
130   return self->defaultParser;
131 }
132
133 /* operation */
134
135 - (id)parseValue:(id)_data ofHeaderField:(NSString *)_field {
136   id parser;
137
138   parser = [self->fieldNameToParser objectForKey:_field];
139   
140   if (parser == nil)
141     parser = [self defaultParser];
142
143   return [parser parseValue:_data ofHeaderField:_field];
144 }
145
146 /* NSCopying */
147
148 - (id)copyWithZone:(NSZone *)_zone {
149   id           copy;
150   NSEnumerator *keys;
151   NSString     *key;
152
153   copy = [[NGMimeHeaderFieldParserSet allocWithZone:_zone]
154                                       initWithDefaultParser:
155                                         [self defaultParser]];
156   
157   keys = [self->fieldNameToParser keyEnumerator];
158   while ((key = [keys nextObject])) {
159     id value = [self->fieldNameToParser objectForKey:key];
160
161     [copy setParser:value forField:key];
162   }
163   return copy;
164 }
165
166 // description
167
168 - (NSString *)description {
169   return [NSString stringWithFormat:
170                      @"<HeaderFieldParserSet: id=0x%08X map=%@ default=%@>",
171                      (unsigned)self, self->fieldNameToParser,
172                      [self defaultParser]];
173 }
174
175 @end /* NGMimeHeaderFieldParserSet */