1 /*****************************************************************************/
2 // Copyright 2006-2007 Adobe Systems Incorporated
3 // All Rights Reserved.
4 //
5 // NOTICE:  Adobe permits you to use, modify, and distribute this file in
6 // accordance with the terms of the Adobe license agreement accompanying it.
7 /*****************************************************************************/
8 
9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_string.h#2 $ */
10 /* $DateTime: 2012/07/31 22:04:34 $ */
11 /* $Change: 840853 $ */
12 /* $Author: tknoll $ */
13 
14 /** \file
15  * Text string representation.
16  */
17 
18 /*****************************************************************************/
19 
20 #ifndef __dng_string__
21 #define __dng_string__
22 
23 /*****************************************************************************/
24 
25 #include "dng_types.h"
26 #include "dng_memory.h"
27 
28 /*****************************************************************************/
29 
30 class dng_string
31 	{
32 
33 	private:
34 
35 		// Always stored internally as a UTF-8 encoded string.
36 
37 		dng_memory_data fData;
38 
39 	public:
40 
41 		dng_string ();
42 
43 		dng_string (const dng_string &s);
44 
45 		dng_string & operator= (const dng_string &s);
46 
47 		~dng_string ();
48 
49 		const char * Get () const;
50 
51 		bool IsASCII () const;
52 
53 		void Set (const char *s);
54 
55 		void Set_ASCII (const char *s);
56 
57 		void Set_UTF8 (const char *s);
58 
59 		uint32 Get_SystemEncoding (dng_memory_data &buffer) const;
60 
61 		void Set_SystemEncoding (const char *s);
62 
63 		bool ValidSystemEncoding () const;
64 
65 		void Set_JIS_X208_1990 (const char *s);
66 
67 		static uint32 DecodeUTF8 (const char *&s,
68 								  uint32 maxBytes = 6,
69 								  bool *isValid = NULL);
70 
71 		static bool IsUTF8 (const char *s);
72 
73 		void Set_UTF8_or_System (const char *s);
74 
75 		uint32 Get_UTF16 (dng_memory_data &buffer) const;
76 
77 		void Set_UTF16 (const uint16 *s);
78 
79 		void Clear ();
80 
81 		void Truncate (uint32 maxBytes);
82 
83 		bool TrimTrailingBlanks ();
84 
85 		bool TrimLeadingBlanks ();
86 
87 		bool IsEmpty () const;
88 
NotEmpty()89 		bool NotEmpty () const
90 			{
91 			return !IsEmpty ();
92 			}
93 
94 		uint32 Length () const;
95 
96 		bool operator== (const dng_string &s) const;
97 
98 		bool operator!= (const dng_string &s) const
99 			{
100 			return !(*this == s);
101 			}
102 
103 		// A utility for doing case insensitive comparisons on strings...
104 
105 		static bool Matches (const char *t,
106 							 const char *s,
107 							 bool case_sensitive = false);
108 
109 		// ...wrapped up for use with dng_string.
110 
111 		bool Matches (const char *s,
112 					  bool case_sensitive = false) const;
113 
114 		bool StartsWith (const char *s,
115 						 bool case_sensitive = false) const;
116 
117 		bool EndsWith (const char *s,
118 					   bool case_sensitive = false) const;
119 
120 		bool Contains (const char *s,
121 					   bool case_sensitive = false,
122 					   int32 *match_offset = NULL) const;
123 
124 		bool Replace (const char *old_string,
125 					  const char *new_string,
126 					  bool case_sensitive = true);
127 
128 		bool TrimLeading (const char *s,
129 						  bool case_sensitive = false);
130 
131 		void Append (const char *s);
132 
133 		void SetUppercase ();
134 
135 		void SetLowercase ();
136 
137 		void SetLineEndings (char ending);
138 
SetLineEndingsToNewLines()139 		void SetLineEndingsToNewLines ()
140 			{
141 			SetLineEndings ('\n');
142 			}
143 
SetLineEndingsToReturns()144 		void SetLineEndingsToReturns ()
145 			{
146 			SetLineEndings ('\r');
147 			}
148 
149 		void StripLowASCII ();
150 
151 		void ForceASCII ();
152 
153 		int32 Compare (const dng_string &s) const;
154 
155 		// A utility to convert fields of numbers into comma separated numbers.
156 
157 		void NormalizeAsCommaSeparatedNumbers ();
158 
159 	};
160 
161 /*****************************************************************************/
162 
163 #endif
164 
165 /*****************************************************************************/
166