]> err.no Git - sope/blob - sope-core/samples/EncodingTool.m
Drop apache 1 build-dependency
[sope] / sope-core / samples / EncodingTool.m
1 /*
2   Copyright (C) 2000-2005 SKYRIX Software AG
3
4   This file is part of SOPE.
5
6   SOPE 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   SOPE 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 SOPE; 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
22 #import "EncodingTool.h"
23 #import "common.h"
24 #import <NGStreams/NGStreams.h>
25 #import <NGMime/NGMime.h>
26 #import <NGMail/NGMail.h>
27
28 @implementation EncodingTool
29
30 - (NSUserDefaults *)userDefaults {
31   return [NSUserDefaults standardUserDefaults];
32 }
33
34
35 - (BOOL)getEncoding:(NSString *)_encodingStr
36   encoding:(NSStringEncoding *)_encoding
37 {
38   NSLog(@"_encoding %@", _encodingStr);
39   if ([_encodingStr isEqualToString:@"NSASCIIStringEncoding"])
40     *_encoding = NSASCIIStringEncoding;
41   else if ([_encodingStr isEqualToString:@"NSNEXTSTEPStringEncoding"])
42     *_encoding = NSNEXTSTEPStringEncoding;
43   else if ([_encodingStr isEqualToString:@"NSJapaneseEUCStringEncoding"])
44     *_encoding = NSJapaneseEUCStringEncoding;
45   else if ([_encodingStr isEqualToString:@"NSUTF8StringEncoding"])
46     *_encoding = NSUTF8StringEncoding;
47   else if ([_encodingStr isEqualToString:@"NSISOLatin1StringEncoding"])
48     *_encoding = NSISOLatin1StringEncoding;
49   else if ([_encodingStr isEqualToString:@"NSSymbolStringEncoding"])
50     *_encoding = NSSymbolStringEncoding;
51   else if ([_encodingStr isEqualToString:@"NSNonLossyASCIIStringEncoding"])
52     *_encoding = NSNonLossyASCIIStringEncoding;
53   else if ([_encodingStr isEqualToString:@"NSShiftJISStringEncoding"])
54     *_encoding = NSShiftJISStringEncoding;
55   else if ([_encodingStr isEqualToString:@"NSISOLatin2StringEncoding"])
56     *_encoding = NSISOLatin2StringEncoding;
57   else if ([_encodingStr isEqualToString:@"NSUnicodeStringEncoding"])
58     *_encoding = NSUnicodeStringEncoding;
59 #if LIB_FOUNDATION_LIBRARY
60   else if ([_encodingStr isEqualToString:@"NSISOLatin9StringEncoding"])
61     *_encoding = NSISOLatin9StringEncoding;
62   else if ([_encodingStr isEqualToString:@"NSAdobeStandardCyrillicStringEncoding"])
63     *_encoding = NSAdobeStandardCyrillicStringEncoding;
64   else if ([_encodingStr isEqualToString:@"NSWinLatin1StringEncoding"])
65     *_encoding = NSWinLatin1StringEncoding;
66 #endif
67   else {
68     NSLog(@"%s: could not find encoding: '%@'",
69           __PRETTY_FUNCTION__, _encodingStr);
70     return NO;
71   }
72   return YES;
73 }
74
75 - (void)processEncoding {
76   NSData   *data;
77   NSString *str;
78
79   data = [NSData dataWithContentsOfFile:self->file];
80
81   NSLog(@"%s: got data %s", __PRETTY_FUNCTION__, [data bytes]);
82
83   str = [[[NSString alloc] initWithData:data encoding:self->fromEncoding]
84                     autorelease];
85   NSLog(@"%s: str length %d str %s ", __PRETTY_FUNCTION__, [str length], [str cString]);
86   data = [str dataUsingEncoding:self->toEncoding];
87   NSLog(@"%s: data length %d str %s ", __PRETTY_FUNCTION__, [data length], [data bytes]);
88   
89 }
90
91 /* tool operation */
92
93 - (int)usage {
94   fprintf(stderr, "usage: encoding <file>\n");
95   fprintf(stderr, "  -from_encoding  <s>\n");
96   fprintf(stderr, "  -to_encoding    <s>\n");
97   return 1;
98 }
99
100 - (int)runWithArguments:(NSArray *)_args {
101   NSUserDefaults *ud = [self userDefaults];
102   NSString *tmp;
103   
104   _args = [_args subarrayWithRange:NSMakeRange(1, [_args count] - 1)];
105   if ([_args count] == 0)
106     return [self usage];
107
108   self->file = [_args lastObject];
109
110   tmp = [ud stringForKey:@"from_encoding"];
111   if ([tmp length]) {
112     if (![self getEncoding:tmp encoding:&self->fromEncoding])
113       self->fromEncoding = [NSString defaultCStringEncoding];
114   }
115   else
116     self->fromEncoding = [NSString defaultCStringEncoding];
117
118   tmp = [ud stringForKey:@"to_encoding"];
119   if ([tmp length]) {
120     if (![self getEncoding:tmp encoding:&self->toEncoding])
121       self->toEncoding = [NSString defaultCStringEncoding];
122   }
123   else
124     self->toEncoding = [NSString defaultCStringEncoding];
125
126   NSLog(@"process file %@ with from-encoding %@ to encoding %@",
127         file, [NSString localizedNameOfStringEncoding:self->fromEncoding],
128         [NSString localizedNameOfStringEncoding:self->toEncoding]);
129
130   [self processEncoding];
131   
132   return 0;
133 }
134
135 @end /* Mime2XmlTool */