]> git.saurik.com Git - wxWidgets.git/blob - src/stc/scintilla/include/PropSet.h
Fix some bugs
[wxWidgets.git] / src / stc / scintilla / include / PropSet.h
1 // Scintilla source code edit control
2 /** @file PropSet.h
3 ** A Java style properties file module.
4 **/
5 // Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
7
8 #ifndef PROPSET_H
9 #define PROPSET_H
10 #include "SString.h"
11
12 bool EqualCaseInsensitive(const char *a, const char *b);
13
14 bool isprefix(const char *target, const char *prefix);
15
16 struct Property {
17 unsigned int hash;
18 char *key;
19 char *val;
20 Property *next;
21 Property() : hash(0), key(0), val(0), next(0) {}
22 };
23
24 /**
25 */
26 class PropSet {
27 protected:
28 enum { hashRoots=31 };
29 Property *props[hashRoots];
30 Property *enumnext;
31 int enumhash;
32 static unsigned int HashString(const char *s, size_t len) {
33 unsigned int ret = 0;
34 while (len--) {
35 ret <<= 4;
36 ret ^= *s;
37 s++;
38 }
39 return ret;
40 }
41 static bool IncludesVar(const char *value, const char *key);
42 public:
43 PropSet *superPS;
44 PropSet();
45 ~PropSet();
46 void Set(const char *key, const char *val, int lenKey=-1, int lenVal=-1);
47 void Set(const char *keyVal);
48 void SetMultiple(const char *s);
49 SString Get(const char *key);
50 SString GetExpanded(const char *key);
51 SString Expand(const char *withVars, int maxExpands=100);
52 int GetInt(const char *key, int defaultValue=0);
53 SString GetWild(const char *keybase, const char *filename);
54 SString GetNewExpand(const char *keybase, const char *filename="");
55 void Clear();
56 char *ToString(); // Caller must delete[] the return value
57 bool GetFirst(char **key, char **val);
58 bool GetNext(char **key, char **val);
59
60 private:
61 // copy-value semantics not implemented
62 PropSet(const PropSet &copy);
63 void operator=(const PropSet &assign);
64 };
65
66 /**
67 */
68 class WordList {
69 public:
70 // Each word contains at least one character - a empty word acts as sentinel at the end.
71 char **words;
72 char **wordsNoCase;
73 char *list;
74 int len;
75 bool onlyLineEnds; ///< Delimited by any white space or only line ends
76 bool sorted;
77 int starts[256];
78 WordList(bool onlyLineEnds_ = false) :
79 words(0), wordsNoCase(0), list(0), len(0), onlyLineEnds(onlyLineEnds_), sorted(false) {}
80 ~WordList() { Clear(); }
81 operator bool() { return len ? true : false; }
82 char *operator[](int ind) { return words[ind]; }
83 void Clear();
84 void Set(const char *s);
85 char *Allocate(int size);
86 void SetFromAllocated();
87 bool InList(const char *s);
88 const char *GetNearestWord(const char *wordStart, int searchLen = -1,
89 bool ignoreCase = false, SString wordCharacters="", int wordIndex = -1);
90 char *GetNearestWords(const char *wordStart, int searchLen=-1,
91 bool ignoreCase=false, char otherSeparator='\0', bool exactLen=false);
92 };
93
94 inline bool IsAlphabetic(unsigned int ch) {
95 return ((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z'));
96 }
97
98
99 #ifdef _MSC_VER
100 // Visual C++ doesn't like the private copy idiom for disabling
101 // the default copy constructor and operator=, but it's fine.
102 #pragma warning(disable: 4511 4512)
103 #endif
104
105 #endif