]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/stc/scintilla/include/PropSet.h
Updated list of subprojects.
[wxWidgets.git] / src / stc / scintilla / include / PropSet.h
... / ...
CommitLineData
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
12bool EqualCaseInsensitive(const char *a, const char *b);
13
14bool isprefix(const char *target, const char *prefix);
15
16struct 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 */
26class PropSet {
27protected:
28 enum { hashRoots=31 };
29 Property *props[hashRoots];
30 Property *enumnext;
31 int enumhash;
32 static bool caseSensitiveFilenames;
33 static unsigned int HashString(const char *s, size_t len) {
34 unsigned int ret = 0;
35 while (len--) {
36 ret <<= 4;
37 ret ^= *s;
38 s++;
39 }
40 return ret;
41 }
42 static bool IncludesVar(const char *value, const char *key);
43
44public:
45 PropSet *superPS;
46 PropSet();
47 ~PropSet();
48 void Set(const char *key, const char *val, int lenKey=-1, int lenVal=-1);
49 void Set(const char *keyVal);
50 void Unset(const char *key, int lenKey=-1);
51 void SetMultiple(const char *s);
52 SString Get(const char *key);
53 SString GetExpanded(const char *key);
54 SString Expand(const char *withVars, int maxExpands=100);
55 int GetInt(const char *key, int defaultValue=0);
56 SString GetWild(const char *keybase, const char *filename);
57 SString GetNewExpand(const char *keybase, const char *filename="");
58 void Clear();
59 char *ToString(); // Caller must delete[] the return value
60 bool GetFirst(char **key, char **val);
61 bool GetNext(char **key, char **val);
62 static void SetCaseSensitiveFilenames(bool caseSensitiveFilenames_) {
63 caseSensitiveFilenames = caseSensitiveFilenames_;
64 }
65
66private:
67 // copy-value semantics not implemented
68 PropSet(const PropSet &copy);
69 void operator=(const PropSet &assign);
70};
71
72/**
73 */
74class WordList {
75public:
76 // Each word contains at least one character - a empty word acts as sentinel at the end.
77 char **words;
78 char **wordsNoCase;
79 char *list;
80 int len;
81 bool onlyLineEnds; ///< Delimited by any white space or only line ends
82 bool sorted;
83 bool sortedNoCase;
84 int starts[256];
85 WordList(bool onlyLineEnds_ = false) :
86 words(0), wordsNoCase(0), list(0), len(0), onlyLineEnds(onlyLineEnds_),
87 sorted(false), sortedNoCase(false) {}
88 ~WordList() { Clear(); }
89 operator bool() { return len ? true : false; }
90 char *operator[](int ind) { return words[ind]; }
91 void Clear();
92 void Set(const char *s);
93 char *Allocate(int size);
94 void SetFromAllocated();
95 bool InList(const char *s);
96 bool InListAbbreviated(const char *s, const char marker);
97 const char *GetNearestWord(const char *wordStart, int searchLen,
98 bool ignoreCase = false, SString wordCharacters="", int wordIndex = -1);
99 char *GetNearestWords(const char *wordStart, int searchLen,
100 bool ignoreCase=false, char otherSeparator='\0', bool exactLen=false);
101};
102
103inline bool IsAlphabetic(unsigned int ch) {
104 return ((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z'));
105}
106
107
108#ifdef _MSC_VER
109// Visual C++ doesn't like the private copy idiom for disabling
110// the default copy constructor and operator=, but it's fine.
111#pragma warning(disable: 4511 4512)
112#endif
113
114#endif