From 954786c678c411bd28016dcbc2b4d68ca861fb58 Mon Sep 17 00:00:00 2001 From: attilamolnar Date: Mon, 29 Oct 2012 17:19:21 +0100 Subject: Move ServerConfig::ProcessColors() into class InspIRCd, as a helper function Change signature to accept a file_cache reference so modules can use it easily --- include/configreader.h | 4 --- include/inspircd.h | 5 ++++ src/configreader.cpp | 70 +++++--------------------------------------------- src/helperfuncs.cpp | 57 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 68 deletions(-) diff --git a/include/configreader.h b/include/configreader.h index da530b6d9..07c7a09f5 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -568,10 +568,6 @@ class CoreExport ServerConfig void Fill(); - /** Parses color codes from string values to actual color codes - */ - void ProcessColors(ConfigFileCache::iterator &file); - /** Returns true if the given string starts with a windows drive letter */ bool StartsWithWindowsDriveLetter(const std::string &path); diff --git a/include/inspircd.h b/include/inspircd.h index cb4f1558f..b61ef8031 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -711,6 +711,11 @@ class CoreExport InspIRCd */ static void StripColor(std::string &sentence); + /** Parses color codes from string values to actual color codes + * @param input The data to process + */ + static void ProcessColors(file_cache& input); + /** Rehash the local server */ void RehashServer(); diff --git a/src/configreader.cpp b/src/configreader.cpp index 68beddb27..56aab671f 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -773,14 +773,13 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid) if(!tag->getBool("allowmotdcolors")) continue; - ConfigFileCache::iterator motdfile = this->Files.find(tag->getString("motd", "motd")); - ConfigFileCache::iterator rulesfile = this->Files.find(tag->getString("rules", "rules")); + ConfigFileCache::iterator file = this->Files.find(tag->getString("motd", "motd")); + if (file != this->Files.end()) + InspIRCd::ProcessColors(file->second); - if(motdfile != this->Files.end()) - this->ProcessColors(motdfile); - - if(rulesfile != this->Files.end()) - this->ProcessColors(rulesfile); + file = this->Files.find(tag->getString("rules", "rules")); + if (file != this->Files.end()) + InspIRCd::ProcessColors(file->second); } /* No old configuration -> initial boot, nothing more to do here */ @@ -901,63 +900,6 @@ ConfigTagList ServerConfig::ConfTags(const std::string& tag) return config_data.equal_range(tag); } -/* - * Replace all color codes from the special[] array to actual - * color code chars using C++ style escape sequences. You - * can append other chars to replace if you like -- Justasic - */ -void ServerConfig::ProcessColors(ConfigFileCache::iterator &file) -{ - static struct special_chars - { - std::string character; - std::string replace; - special_chars(const std::string &c, const std::string &r) : character(c), replace(r) { } - } - - special[] = { - special_chars("\\002", "\002"), // Bold - special_chars("\\037", "\037"), // underline - special_chars("\\003", "\003"), // Color - special_chars("\\017", "\017"), // Stop colors - special_chars("\\u", "\037"), // Alias for underline - special_chars("\\b", "\002"), // Alias for Bold - special_chars("\\x", "\017"), // Alias for stop - special_chars("\\c", "\003"), // Alias for color - special_chars("", "") - }; - - for(file_cache::iterator it = file->second.begin(), it_end = file->second.end(); it != it_end; it++) - { - std::string ret = *it; - for(int i = 0; special[i].character.empty() == false; ++i) - { - std::string::size_type pos = ret.find(special[i].character); - if(pos == std::string::npos) // Couldn't find the character, skip this line - continue; - - if((pos > 0) && (ret[pos-1] == '\\') && (ret[pos] == '\\')) - continue; // Skip double slashes. - - // Replace all our characters in the array - while(pos != std::string::npos) - { - ret = ret.substr(0, pos) + special[i].replace + ret.substr(pos + special[i].character.size()); - pos = ret.find(special[i].character, pos + special[i].replace.size()); - } - } - - // Replace double slashes with a single slash before we return - std::string::size_type pos = ret.find("\\\\"); - while(pos != std::string::npos) - { - ret = ret.substr(0, pos) + "\\" + ret.substr(pos + 2); - pos = ret.find("\\\\", pos + 1); - } - *it = ret; - } -} - bool ServerConfig::FileExists(const char* file) { struct stat sb; diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index 3efa58bba..7058cf8d3 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -223,6 +223,63 @@ void InspIRCd::StripColor(std::string &sentence) } } +void InspIRCd::ProcessColors(file_cache& input) +{ + /* + * Replace all color codes from the special[] array to actual + * color code chars using C++ style escape sequences. You + * can append other chars to replace if you like -- Justasic + */ + static struct special_chars + { + std::string character; + std::string replace; + special_chars(const std::string &c, const std::string &r) : character(c), replace(r) { } + } + + special[] = { + special_chars("\\002", "\002"), // Bold + special_chars("\\037", "\037"), // underline + special_chars("\\003", "\003"), // Color + special_chars("\\017", "\017"), // Stop colors + special_chars("\\u", "\037"), // Alias for underline + special_chars("\\b", "\002"), // Alias for Bold + special_chars("\\x", "\017"), // Alias for stop + special_chars("\\c", "\003"), // Alias for color + special_chars("", "") + }; + + for(file_cache::iterator it = input.begin(), it_end = input.end(); it != it_end; it++) + { + std::string ret = *it; + for(int i = 0; special[i].character.empty() == false; ++i) + { + std::string::size_type pos = ret.find(special[i].character); + if(pos == std::string::npos) // Couldn't find the character, skip this line + continue; + + if((pos > 0) && (ret[pos-1] == '\\') && (ret[pos] == '\\')) + continue; // Skip double slashes. + + // Replace all our characters in the array + while(pos != std::string::npos) + { + ret = ret.substr(0, pos) + special[i].replace + ret.substr(pos + special[i].character.size()); + pos = ret.find(special[i].character, pos + special[i].replace.size()); + } + } + + // Replace double slashes with a single slash before we return + std::string::size_type pos = ret.find("\\\\"); + while(pos != std::string::npos) + { + ret = ret.substr(0, pos) + "\\" + ret.substr(pos + 2); + pos = ret.find("\\\\", pos + 1); + } + *it = ret; + } +} + /* true for valid channel name, false else */ bool IsChannelHandler::Call(const char *chname, size_t max) { -- cgit v1.2.3