--- /dev/null
+// Scintilla source code edit control\r
+/** @file CharacterSet.h\r
+ ** Encapsulates a set of characters. Used to test if a character is within a set.\r
+ **/\r
+// Copyright 2007 by Neil Hodgson <neilh@scintilla.org>\r
+// The License.txt file describes the conditions under which this software may be distributed.\r
+\r
+class CharacterSet {\r
+ int size;\r
+ bool valueAfter;\r
+ bool *bset;\r
+public:\r
+ enum setBase {\r
+ setNone=0,\r
+ setLower=1,\r
+ setUpper=2,\r
+ setDigits=4,\r
+ setAlpha=setLower|setUpper,\r
+ setAlphaNum=setAlpha|setDigits\r
+ };\r
+ CharacterSet(setBase base=setNone, const char *initialSet="", int size_=0x80, bool valueAfter_=false) {\r
+ size = size_;\r
+ valueAfter = valueAfter_;\r
+ bset = new bool[size];\r
+ for (int i=0; i < size; i++) {\r
+ bset[i] = false;\r
+ }\r
+ AddString(initialSet);\r
+ if (base & setLower)\r
+ AddString("abcdefghijklmnopqrstuvwxyz");\r
+ if (base & setUpper)\r
+ AddString("ABCDEFGHIJKLMNOPQRSTUVWXYZ");\r
+ if (base & setDigits)\r
+ AddString("0123456789");\r
+ }\r
+ ~CharacterSet() {\r
+ delete []bset;\r
+ bset = 0;\r
+ size = 0;\r
+ }\r
+ void Add(int val) {\r
+ PLATFORM_ASSERT(val >= 0);\r
+ PLATFORM_ASSERT(val < size);\r
+ bset[val] = true;\r
+ }\r
+ void AddString(const char *CharacterSet) {\r
+ for (const char *cp=CharacterSet; *cp; cp++) {\r
+ int val = static_cast<unsigned char>(*cp);\r
+ PLATFORM_ASSERT(val >= 0);\r
+ PLATFORM_ASSERT(val < size);\r
+ bset[val] = true;\r
+ }\r
+ }\r
+ bool Contains(int val) const {\r
+ PLATFORM_ASSERT(val >= 0);\r
+ return (val < size) ? bset[val] : valueAfter;\r
+ }\r
+};\r