--- /dev/null
+//////////////////////////////////////////////////////////////////////\r
+//\r
+// MIME Character Classification\r
+//\r
+// Jeff Lee\r
+// Dec 16, 2000\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(_MIME_CHAR_H)\r
+#define _MIME_CHAR_H\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+class CMimeChar\r
+{\r
+public:\r
+ static bool IsNonAscii(unsigned char ch) { return (ch & 0x80) != 0; }\r
+ static bool IsControl(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & CONTROL) != 0; }\r
+ static bool IsSpace(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & SPACE) != 0; }\r
+ static bool IsPrintable(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & PRINT) != 0; }\r
+ static bool IsSpecial(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & SPECIAL) != 0; }\r
+ static bool IsHexDigit(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & HEXDIGIT) != 0; }\r
+ static bool IsDelimiter(unsigned char ch) { return IsSpace(ch) || IsSpecial(ch); }\r
+ static bool IsToken(unsigned char ch) { return IsNonAscii(ch) || (ch > ' ' && !IsSpecial(ch)); }\r
+\r
+private:\r
+ enum { CONTROL=0x01, SPACE=0x02, PRINT=0x04, PUNCT=0x10, SPECIAL=0x20, HEXDIGIT=0x40 };\r
+ static const unsigned char m_aCharTbl[128];\r
+};\r
+\r
+#endif // _MIME_CHAR_H
\ No newline at end of file