diff options
Diffstat (limited to 'include/PropSet.h')
-rw-r--r-- | include/PropSet.h | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/include/PropSet.h b/include/PropSet.h new file mode 100644 index 000000000..31da01f95 --- /dev/null +++ b/include/PropSet.h @@ -0,0 +1,180 @@ +// SciTE - Scintilla based Text Editor +// PropSet.h - a java style properties file module +// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef PROPSET_H +#define PROPSET_H + +bool EqualCaseInsensitive(const char *a, const char *b); + +// Define another string class. +// While it would be 'better' to use std::string, that doubles the executable size. + +inline char *StringDup(const char *s) { + if (!s) + return 0; + char *sNew = new char[strlen(s) + 1]; + if (sNew) + strcpy(sNew, s); + return sNew; +} + +class SString { + char *s; +public: + SString() { + s = 0; + } + SString(const SString &source) { + s = StringDup(source.s); + } + SString(const char *s_) { + s = StringDup(s_); + } + SString(int i) { + char number[100]; + sprintf(number, "%0d", i); + //itoa(i, number, 10); + s = StringDup(number); + } + ~SString() { + delete []s; + s = 0; + } + SString &operator=(const SString &source) { + if (this != &source) { + delete []s; + s = StringDup(source.s); + } + return *this; + } + bool operator==(const SString &other) const { + if ((s == 0) && (other.s == 0)) + return true; + if ((s == 0) || (other.s == 0)) + return false; + return strcmp(s, other.s) == 0; + } + bool operator==(const char *sother) const { + if ((s == 0) && (sother == 0)) + return true; + if ((s == 0) || (sother == 0)) + return false; + return strcmp(s, sother) == 0; + } + const char *c_str() const { + if (s) + return s; + else + return ""; + } + int length() const { + if (s) + return strlen(s); + else + return 0; + } + char operator[](int i) { + if (s) + return s[i]; + else + return '\0'; + } + SString &operator +=(const char *sother) { + int len = length(); + int lenOther = strlen(sother); + char *sNew = new char[len + lenOther + 1]; + if (sNew) { + if (s) + memcpy(sNew, s, len); + memcpy(sNew + len, sother, lenOther); + sNew[len + lenOther] = '\0'; + delete []s; + s = sNew; + } + return *this; + } + int value() { + if (s) + return atoi(s); + else + return 0; + } +}; + +class PropSet { +private: + char **vals; + int size; + int used; +public: + PropSet *superPS; + PropSet(); + ~PropSet(); + void EnsureCanAddEntry(); + void Set(const char *key, const char *val); + void Set(char *keyval); + SString Get(const char *key); + int GetInt(const char *key, int defaultValue=0); + SString GetWild(const char *keybase, const char *filename); + SString GetNewExpand(const char *keybase, const char *filename); + void Clear(); + void ReadFromMemory(const char *data, int len); + void Read(const char *filename); +}; + +// This is a fixed length list of strings suitable for display in combo boxes +// as a memory of user entries +template<int sz> +class EntryMemory { + SString entries[sz]; +public: + void Insert(SString s) { + for (int i=0;i<sz;i++) { + if (entries[i] == s) { + for (int j=i;j>0;j--) { + entries[j] = entries[j-1]; + } + entries[0] = s; + return; + } + } + for (int k=sz-1;k>0;k--) { + entries[k] = entries[k-1]; + } + entries[0] = s; + } + int Length() const { + int len = 0; + for (int i=0;i<sz;i++) + if (entries[i].length()) + len++; + return len; + } + SString At(int n) const { + return entries[n]; + } +}; + +class WordList { +public: + // Each word contains at least one character - a empty word acts as sentinal at the end. + char **words; + char *list; + int len; + bool onlyLineEnds; // Delimited by any white space or only line ends + int starts[256]; + WordList(bool onlyLineEnds_ = false) : + words(0), list(0), len(0), onlyLineEnds(onlyLineEnds_) {} + ~WordList() { Clear(); } + operator bool() { return list; } + const char *operator[](int ind) { return words[ind]; } + void Clear(); + void Set(const char *s); + char *Allocate(int size); + void SetFromAllocated(); + bool InList(const char *s); +}; + +#endif |