aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/basetypes/MCString.h
blob: e6c6ce5da0222f3f699d789f366ecacfa365f437 (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
#ifndef __MAILCORE_MCSTR_H_

#define __MAILCORE_MCSTR_H_

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

#include <stdarg.h>

#ifdef __cplusplus

namespace mailcore {
	
	class Data;
	class Array;

	class 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 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 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 * 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();
		
		virtual Data * mUTF7EncodedData();
		static String * stringWithMUTF7Data(Data * data);
		virtual String * mUTF7EncodedString();
		virtual String * mUTF7DecodedString();
        
        virtual String * htmlEncodedString();
		virtual String * cleanedHTMLString();
        
    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();
        
	private:
		UChar * mUnicodeChars;
		unsigned int mLength;
		unsigned int mAllocated;
		void allocate(unsigned int length);
		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);
	};
    
    void setICUDataDirectory(String * directory);
}

#endif

#endif