#ifndef FELIX_THE_CAT_FSYSTEM_CONFIGPARSER_HEADER_FILE_INCLUDED_KHKLJWGNBBVKJGLKXBVMZVEKLEKFJKJSAGSKAJGHJKBHQRPOTU #define FELIX_THE_CAT_FSYSTEM_CONFIGPARSER_HEADER_FILE_INCLUDED_KHKLJWGNBBVKJGLKXBVMZVEKLEKFJKJSAGSKAJGHJKBHQRPOTU #include #include #include using namespace std; const char CONFIGVALUETYPESTRING = 0; const char CONFIGVALUETYPESET = 1; class ConfigValue; // Класс описывающий параметр из конфигурационного файла class ConfigParam { public: string name; vector val; // возвращает первое значение параметра (если их несколько) string GetSingleVal() const; // создаем из строки ConfigParam(string name); // создаем просто так ConfigParam(); // создаем параметр с единственным значением ConfigParam(string name, string value); }; bool operator<(const ConfigParam &a, const ConfigParam &b); // Класс, описывающий значение параметра в конфигурационном файле class ConfigValue { public: char type; string sval; set pval; string GetParamVal(string pname) const; }; // Класс, разбирающий конфигурационный файл class ConfigParser { private: char *s; int slen; int mode; int cline; // переделывает число в строку string i2s(int a); // разбирает s с l по r, считая, что она должна быть ConfigValue - ом void ParseConfigValue(int &l, int &r, ConfigValue &vl); // возвращает, является ли символ whitespace-ом bool IsWS(char c); // возвращает, может ли такой символ быть в имени параметра bool GoodForName(char c); // убирает двойные кавычки в начале/конце строки (если, конечно, таковые имеются) void TrimQuotes(string &s); // возвращает символ, соответствующий escape-последовательности "\c" char UnSlash(char c); // разбирает s с l по r, считая, что она должна быть ConfigParam - ом // возвращает, какая операция была применена int ParseConfigParam(int &l, int &r, ConfigParam &p); // возращает, считается ли такой символ разделителем // разделителями считаются ws-ы, скобки и запятые bool IsDelim(char c); // Разбирает несколько ConfigValues, заданных через запятую void ParseConfigParamValues(int &l, int &r, ConfigParam &b); void TrimSpaces(string &s); public: ConfigValue cfg; // загружает конфигурационный файл void Load(string fname); // возвращает значение параметра (в старом стиле) // генерирует исключение, если такого нет string GetParam(string name); // возвращает значение параметра (в старом стиле) // возвращает пустую строку, если такого нет string GetParamSilent(string name); }; #endif