#include <EncodedStreamFactory.h>
Inheritance diagram for Core::EncodedStreamFactory:
Public Member Functions | |
EncodedStreamFactory (String *encoding) | |
virtual String * | className (void) const |
Answer receiver class name. | |
virtual void | initializeAsciiEncoder (void) |
virtual String * | encoding (void) |
virtual EncodedStream * | readStream (void) abstract |
virtual EncodedStream * | writeStream (void) abstract |
virtual ByteArray * | normalizedEncoding (void) |
virtual CharacterEncoder * | createCharacterEncoder (void) |
virtual CharacterEncoder * | getCharacterEncoder (void) |
virtual StreamEncoder * | getEncoder (void) |
Static Public Member Functions | |
static Dictionary * | encodingMap (void) |
Protected Attributes | |
String * | _encoding |
ByteArray * | normalized_encoding |
Static Protected Attributes | |
static Dictionary * | encoding_map = nil |
|
Definition at line 49 of file EncodedStreamFactory.cc. References _encoding, Core::String::asLowercase(), Core::Locale::current(), initializeAsciiEncoder(), Core::String::isEqual(), nil, and normalized_encoding. 00050 { 00051 _encoding = encoding->asLowercase(); 00052 if (_encoding->isEqual("default")) 00053 _encoding = Locale::current()->encoding()->asLowercase(); 00054 normalized_encoding = nil; 00055 initializeAsciiEncoder(); 00056 }
|
|
Answer receiver class name. Because there isn't any standard way to obtain class name this method comes to place. Every class should rewrite this method but many didn't (yet). Reimplemented from Core::Object. Reimplemented in Core::ExternalEncodedStreamFactory, Core::InternalEncodedStreamFactory, and Tools::FileEncodedStreamFactory. Definition at line 59 of file EncodedStreamFactory.cc. 00060 { 00061 return new String("EncodedStreamFactory"); 00062 }
|
|
Definition at line 104 of file EncodedStreamFactory.cc. References Core::ByteArray::asCString(), Core::ByteCharacterEncoder::loadFromFile(), normalizedEncoding(), and Core::ByteArray::size(). Referenced by getCharacterEncoder(). 00105 { 00106 /* All charset conversions must be avoided in this method! 00107 * That's why this is written with C functions. 00108 */ 00109 00110 ByteArray *enc = normalizedEncoding(); 00111 int length = 20 + enc->size() + strlen(DATADIR); 00112 char filename[length]; 00113 sprintf(filename, "%s/encodings/%s.enc", DATADIR, enc->asCString()); 00114 00115 ByteCharacterEncoder *encoder = new ByteCharacterEncoder; 00116 encoder->loadFromFile(filename); 00117 return encoder; 00118 }
|
|
Definition at line 81 of file EncodedStreamFactory.cc. References _encoding. 00082 { 00083 return _encoding; 00084 }
|
|
Definition at line 64 of file EncodedStreamFactory.cc. References encoding_map, and nil. Referenced by getCharacterEncoder(), and initializeAsciiEncoder(). 00065 { 00066 if (encoding_map == nil) 00067 encoding_map = new Dictionary; 00068 return encoding_map; 00069 }
|
|
Definition at line 120 of file EncodedStreamFactory.cc. References _encoding, createCharacterEncoder(), encodingMap(), nil, and normalizedEncoding(). Referenced by getEncoder(). 00121 { 00122 CharacterEncoder *encoder = dynamic_cast<CharacterEncoder *>(encodingMap()->at(_encoding, nil)); 00123 if (encoder == nil) { 00124 encoder = dynamic_cast<CharacterEncoder *>(encodingMap()->at(normalizedEncoding(), nil)); 00125 } 00126 if (encoder == nil) { 00127 encoder = createCharacterEncoder(); 00128 encodingMap()->put(normalizedEncoding(), encoder); 00129 } 00130 encodingMap()->put(_encoding, encoder); 00131 return encoder; 00132 }
|
|
Definition at line 134 of file EncodedStreamFactory.cc. References getCharacterEncoder(), and normalizedEncoding(). Referenced by Tools::FileEncodedStreamFactory::appendStream(), Core::EncodedStream::on(), Core::ExternalEncodedStreamFactory::readAppendStream(), Core::InternalEncodedStreamFactory::readStream(), Tools::FileEncodedStreamFactory::readStream(), Core::ExternalEncodedStreamFactory::readStream(), Core::InternalEncodedStreamFactory::writeStream(), Tools::FileEncodedStreamFactory::writeStream(), and Core::ExternalEncodedStreamFactory::writeStream(). 00135 { 00136 if (strcmp(normalizedEncoding()->asCString(), "utf8") == 0) 00137 return new UTF8StreamEncoder; 00138 if (strcmp(normalizedEncoding()->asCString(), "ucs2") == 0) 00139 return new UCS2StreamEncoder; 00140 00141 return new ByteStreamEncoder(getCharacterEncoder()); 00142 }
|
|
Definition at line 72 of file EncodedStreamFactory.cc. References encodingMap(), and Core::ByteCharacterEncoder::forASCII(). Referenced by EncodedStreamFactory(). 00073 { 00074 ByteArray *key = new ByteArray("usascii", 7); 00075 if (!encodingMap()->includesKey(key)) { 00076 encodingMap()->put(key, ByteCharacterEncoder::forASCII()); 00077 } 00078 }
|
|
Definition at line 87 of file EncodedStreamFactory.cc. References _encoding, Core::Character::asInteger(), Core::String::at(), Core::Stream::contents(), Core::Character::isDigit(), Core::Stream::nextPut(), nil, normalized_encoding, and Core::Integer::value(). Referenced by createCharacterEncoder(), getCharacterEncoder(), and getEncoder(). 00088 { 00089 if (normalized_encoding == nil) { 00090 Stream *stream = (new ByteArray(10))->writeStream(); 00091 for (int i = 0; i < _encoding->size(); i++) { 00092 Character *ch = dynamic_cast<Character *>(_encoding->at(i)); 00093 int chValue = ch->asInteger(); 00094 if (ch->isDigit() || (chValue >= 'a' && chValue <= 'z')) { 00095 stream->nextPut(Integer::value(chValue)); 00096 } 00097 } 00098 normalized_encoding = dynamic_cast<ByteArray *>(stream->contents()); 00099 } 00100 return normalized_encoding; 00101 }
|
|
Reimplemented in Core::ExternalEncodedStreamFactory, Core::InternalEncodedStreamFactory, and Tools::FileEncodedStreamFactory. |
|
Reimplemented in Core::ExternalEncodedStreamFactory, Core::InternalEncodedStreamFactory, and Tools::FileEncodedStreamFactory. |
|
Definition at line 41 of file EncodedStreamFactory.h. Referenced by EncodedStreamFactory(), encoding(), getCharacterEncoder(), and normalizedEncoding(). |
|
Definition at line 47 of file EncodedStreamFactory.cc. Referenced by encodingMap(). |
|
Definition at line 42 of file EncodedStreamFactory.h. Referenced by EncodedStreamFactory(), and normalizedEncoding(). |