version 0.1.0
[fms.git] / include / nntp / mime / MimeChar.h
diff --git a/include/nntp/mime/MimeChar.h b/include/nntp/mime/MimeChar.h
new file mode 100644 (file)
index 0000000..b334b00
--- /dev/null
@@ -0,0 +1,34 @@
+//////////////////////////////////////////////////////////////////////\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