b334b00269b4d0dce5727d4e1b11ebe0760de722
[fms.git] / include / nntp / mime / MimeChar.h
1 //////////////////////////////////////////////////////////////////////\r
2 //\r
3 // MIME Character Classification\r
4 //\r
5 // Jeff Lee\r
6 // Dec 16, 2000\r
7 //\r
8 //////////////////////////////////////////////////////////////////////\r
9 \r
10 #if !defined(_MIME_CHAR_H)\r
11 #define _MIME_CHAR_H\r
12 \r
13 #if _MSC_VER > 1000\r
14 #pragma once\r
15 #endif // _MSC_VER > 1000\r
16 \r
17 class CMimeChar\r
18 {\r
19 public:\r
20         static bool IsNonAscii(unsigned char ch) { return (ch & 0x80) != 0; }\r
21         static bool IsControl(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & CONTROL) != 0; }\r
22         static bool IsSpace(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & SPACE) != 0; }\r
23         static bool IsPrintable(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & PRINT) != 0; }\r
24         static bool IsSpecial(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & SPECIAL) != 0; }\r
25         static bool IsHexDigit(unsigned char ch) { return !(ch & 0x80) && (m_aCharTbl[ch] & HEXDIGIT) != 0; }\r
26         static bool IsDelimiter(unsigned char ch) { return IsSpace(ch) || IsSpecial(ch); }\r
27         static bool IsToken(unsigned char ch) { return IsNonAscii(ch) || (ch > ' ' && !IsSpecial(ch)); }\r
28 \r
29 private:\r
30         enum { CONTROL=0x01, SPACE=0x02, PRINT=0x04, PUNCT=0x10, SPECIAL=0x20, HEXDIGIT=0x40 };\r
31         static const unsigned char m_aCharTbl[128];\r
32 };\r
33 \r
34 #endif // _MIME_CHAR_H