aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/basetypes/MCString.h
blob: cbe5538b54502326ad449e47ed90e7025d3b006d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#ifndef MAILCORE_MCSTR_H

#define MAILCORE_MCSTR_H

#include <MailCore/MCObject.h>
#include <MailCore/MCRange.h>
#include <MailCore/MCICUTypes.h>

#include <stdlib.h>
#include <stdarg.h>

#ifdef __cplusplus

namespace mailcore {
    
    class Data;
    class Array;
    
    class MAILCORE_EXPORT String : public Object {
    public:
        String(const UChar * unicodeChars = NULL);
        String(const UChar * unicodeChars, unsigned int length);
        String(const char * UTF8Characters);
        String(Data * data, const char * charset);
        String(const char * bytes, unsigned int length, const char * charset = NULL);
        virtual ~String();
        
        static String * string();
        static String * stringWithUTF8Format(const char * format, ...);
        static String * stringWithVUTF8Format(const char * format, va_list ap);
        static String * stringWithUTF8Characters(const char * UTF8Characters);
        static String * stringWithCharacters(const UChar * characters);
        static String * stringWithCharacters(const UChar * characters, unsigned int length);
        static String * stringWithData(Data * data, const char * charset = NULL);
        
        virtual const UChar * unicodeCharacters();
        virtual const char * UTF8Characters();
        virtual unsigned int length();
        
        virtual void appendString(String * otherString);
        virtual void appendUTF8Format(const char * format, ...);
        virtual void appendCharacters(const UChar * unicodeCharacters);
        virtual void appendCharactersLength(const UChar * unicodeCharacters, unsigned int length);
        virtual void appendUTF8Characters(const char * UTF8Characters);
        virtual void setString(String * otherString);
        virtual void setUTF8Characters(const char * UTF8Characters);
        virtual void setCharacters(const UChar * unicodeCharacters);
        
        virtual String * stringByAppendingString(String * otherString);
        virtual String * stringByAppendingUTF8Format(const char * format, ...);
        virtual String * stringByAppendingUTF8Characters(const char * UTF8Characters);
        virtual String * stringByAppendingCharacters(const UChar * unicodeCharacters);
        virtual String * stringByAppendingPathComponent(String * component);
        virtual String * stringByDeletingLastPathComponent();
        virtual String * stringByDeletingPathExtension();

        virtual int compare(String * otherString);
        virtual int caseInsensitiveCompare(String * otherString);
        virtual String * lowercaseString();
        virtual String * uppercaseString();
        
        virtual UChar characterAtIndex(unsigned int idx);
        virtual void deleteCharactersInRange(Range range);
        virtual unsigned int replaceOccurrencesOfString(String * occurrence, String * replacement);
        virtual int locationOfString(String * occurrence);
        virtual int lastLocationOfString(String * occurrence);

        virtual Array * componentsSeparatedByString(String * separator);
        
        virtual bool isEqualCaseInsensitive(String * otherString);
        
        // Additions
        static String * stringByDecodingMIMEHeaderValue(const char * phrase);
        virtual Data * encodedAddressDisplayNameValue();
        virtual Data * encodedMIMEHeaderValue();
        virtual Data * encodedMIMEHeaderValueForSubject();
        virtual String * extractedSubject();
        virtual String * extractedSubjectAndKeepBracket(bool keepBracket);
        static String * uuidString();
        
        virtual bool hasSuffix(String * suffix);
        virtual bool hasPrefix(String * prefix);
        
        virtual String * substringFromIndex(unsigned int idx);
        virtual String * substringToIndex(unsigned int idx);
        virtual String * substringWithRange(Range range);
        
        virtual String * flattenHTML();
        virtual String * flattenHTMLAndShowBlockquote(bool showBlockquote);
        virtual String * flattenHTMLAndShowBlockquoteAndLink(bool showBlockquote, bool showLink);
        
        virtual String * stripWhitespace();
        
        virtual String * lastPathComponent();
        virtual String * pathExtension();
        virtual Data * dataUsingEncoding(const char * charset = NULL);
        
        virtual const char * fileSystemRepresentation();
        static String * stringWithFileSystemRepresentation(const char * filename);
        
        int intValue();
        unsigned int unsignedIntValue();
        long longValue();
        unsigned long unsignedLongValue();
        long long longLongValue();
        unsigned long long unsignedLongLongValue();
        double doubleValue();
        
        virtual Data * mUTF7EncodedData();
        static String * stringWithMUTF7Data(Data * data);
        virtual String * mUTF7EncodedString();
        virtual String * mUTF7DecodedString();
        
        virtual String * htmlEncodedString();
        virtual String * cleanedHTMLString();
        virtual String * htmlMessageContent();
        
        virtual Data * decodedBase64Data();
        
    public: // private
        static String * uniquedStringWithUTF8Characters(const char * UTF8Characters);
        
    public: // subclass behavior
        String(String * otherString);
        virtual String * description();
        virtual Object * copy();
        virtual bool isEqual(Object * otherObject);
        virtual unsigned int hash();
        virtual HashMap * serializable();
        virtual void importSerializable(HashMap * serializable);
        
    private:
        UChar * mUnicodeChars;
        unsigned int mLength;
        unsigned int mAllocated;
        void allocate(unsigned int length, bool force = false);
        void reset();
        int compareWithCaseSensitive(String * otherString, bool caseSensitive);
        void appendBytes(const char * bytes, unsigned int length, const char * charset);
        void appendUTF8CharactersLength(const char * UTF8Characters, unsigned int length);
    };
    
    MAILCORE_EXPORT
    void setICUDataDirectory(String * directory);
}

#endif

#endif