Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

Core::EncodedStreamFactory Class Reference

#include <EncodedStreamFactory.h>

Inheritance diagram for Core::EncodedStreamFactory:

Inheritance graph
[legend]
Collaboration diagram for Core::EncodedStreamFactory:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 EncodedStreamFactory (String *encoding)
virtual StringclassName (void) const
 Answer receiver class name.
virtual void initializeAsciiEncoder (void)
virtual Stringencoding (void)
virtual EncodedStreamreadStream (void) abstract
virtual EncodedStreamwriteStream (void) abstract
virtual ByteArraynormalizedEncoding (void)
virtual CharacterEncodercreateCharacterEncoder (void)
virtual CharacterEncodergetCharacterEncoder (void)
virtual StreamEncodergetEncoder (void)

Static Public Member Functions

static DictionaryencodingMap (void)

Protected Attributes

String_encoding
ByteArraynormalized_encoding

Static Protected Attributes

static Dictionaryencoding_map = nil

Constructor & Destructor Documentation

Core::EncodedStreamFactory::EncodedStreamFactory String encoding  ) 
 

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 }


Member Function Documentation

String * Core::EncodedStreamFactory::className void   )  const [virtual]
 

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 }

CharacterEncoder * Core::EncodedStreamFactory::createCharacterEncoder void   )  [virtual]
 

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 }

String * Core::EncodedStreamFactory::encoding void   )  [virtual]
 

Definition at line 81 of file EncodedStreamFactory.cc.

References _encoding.

00082 {
00083     return _encoding;
00084 }

Dictionary * Core::EncodedStreamFactory::encodingMap void   )  [static]
 

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 }

CharacterEncoder * Core::EncodedStreamFactory::getCharacterEncoder void   )  [virtual]
 

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 }

StreamEncoder * Core::EncodedStreamFactory::getEncoder void   )  [virtual]
 

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 }

void Core::EncodedStreamFactory::initializeAsciiEncoder void   )  [virtual]
 

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 }

ByteArray * Core::EncodedStreamFactory::normalizedEncoding void   )  [virtual]
 

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 }

virtual EncodedStream* Core::EncodedStreamFactory::readStream void   )  [virtual]
 

Reimplemented in Core::ExternalEncodedStreamFactory, Core::InternalEncodedStreamFactory, and Tools::FileEncodedStreamFactory.

virtual EncodedStream* Core::EncodedStreamFactory::writeStream void   )  [virtual]
 

Reimplemented in Core::ExternalEncodedStreamFactory, Core::InternalEncodedStreamFactory, and Tools::FileEncodedStreamFactory.


Member Data Documentation

String* Core::EncodedStreamFactory::_encoding [protected]
 

Definition at line 41 of file EncodedStreamFactory.h.

Referenced by EncodedStreamFactory(), encoding(), getCharacterEncoder(), and normalizedEncoding().

Dictionary * Core::EncodedStreamFactory::encoding_map = nil [static, protected]
 

Definition at line 47 of file EncodedStreamFactory.cc.

Referenced by encodingMap().

ByteArray* Core::EncodedStreamFactory::normalized_encoding [protected]
 

Definition at line 42 of file EncodedStreamFactory.h.

Referenced by EncodedStreamFactory(), and normalizedEncoding().


The documentation for this class was generated from the following files:
Generated on Mon Nov 27 09:51:22 2006 for Smalltalk like C++ Class Library by  doxygen 1.4.2