From: <hik...@us...> - 2011-08-15 23:32:25
|
Revision: 9511 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=9511&view=rev Author: hikerstk Date: 2011-08-15 23:32:18 +0000 (Mon, 15 Aug 2011) Log Message: ----------- Added encoding of special characters when writing addons_installed.xml. Modified Paths: -------------- main/trunk/src/addons/addon.cpp main/trunk/src/utils/string_utils.cpp main/trunk/src/utils/string_utils.hpp Modified: main/trunk/src/addons/addon.cpp =================================================================== --- main/trunk/src/addons/addon.cpp 2011-08-15 23:29:14 UTC (rev 9510) +++ main/trunk/src/addons/addon.cpp 2011-08-15 23:32:18 UTC (rev 9511) @@ -61,7 +61,7 @@ std::string designer; xml.get("name", &name ); - m_name = StringUtils::removeHtmlEntities(name); + m_name = StringUtils::decodeFromHtmlEntities(name); m_id = StringUtils::toLowerCase(name); xml.get("id", &m_id ); xml.get("designer", &designer ); @@ -73,8 +73,8 @@ xml.get("file", &m_zip_file ); xml.get("description", &description ); - m_description = StringUtils::removeHtmlEntities(description); - m_designer = StringUtils::removeHtmlEntities(designer); + m_description = StringUtils::decodeFromHtmlEntities(description); + m_designer = StringUtils::decodeFromHtmlEntities(designer); // resolve XML entities //m_description = StringUtils::replace(m_description, " ", "\n"); @@ -114,9 +114,11 @@ void Addon::writeXML(std::ofstream *out_stream) { (*out_stream) << " <" << m_type - << " name=\"" << core::stringc(m_name).c_str() + << " name=\"" + << StringUtils::encodeToHtmlEntities(m_name) << "\" id=\"" << m_id - << "\" designer=\"" << core::stringc(m_designer).c_str() + << "\" designer=\"" + << StringUtils::encodeToHtmlEntities(m_designer) << "\" status=\"" << m_status << "\" date=\"" << m_date << "\" installed=\"" Modified: main/trunk/src/utils/string_utils.cpp =================================================================== --- main/trunk/src/utils/string_utils.cpp 2011-08-15 23:29:14 UTC (rev 9510) +++ main/trunk/src/utils/string_utils.cpp 2011-08-15 23:32:18 UTC (rev 9511) @@ -475,8 +475,11 @@ } // ------------------------------------------------------------------------ - - irr::core::stringw removeHtmlEntities(const std::string& input) + /** Converts ASCII text with HTML entities (e.g. &xE9;) to unicode strings + * \param input The input string which should be decoded. + * \return A irrlicht wide string with unicode characters. + */ + irr::core::stringw decodeFromHtmlEntities(const std::string& input) { irr::core::stringw output; std::string entity; @@ -555,8 +558,36 @@ } return output; - } - + } // decodeFromHtmlEntities + + // ------------------------------------------------------------------------ + /** Converts a unicode string to plain ASCII using html-like & codes. + * \param s The input string which should be encoded. + * \return A std:;string with ASCII characters. + */ + std::string encodeToHtmlEntities(const irr::core::stringw &s) + { + std::ostringstream output; + for(unsigned int i=0; i<s.size(); i++) + { + if(s[i]=='&') + output<<"&"; + else + { + if(s[i]<128) + { + irr::c8 c=(char)(s[i]); + output<<c; + } + else + { + output <<"&#" << std::hex <<std::uppercase<< s[i]<<";"; + } + } + } + return output.str(); + } // encodeToHtmlEntities + } // namespace StringUtils Modified: main/trunk/src/utils/string_utils.hpp =================================================================== --- main/trunk/src/utils/string_utils.hpp 2011-08-15 23:29:14 UTC (rev 9510) +++ main/trunk/src/utils/string_utils.hpp 2011-08-15 23:32:18 UTC (rev 9511) @@ -351,11 +351,10 @@ */ std::string replace(const std::string& other, const std::string& from, const std::string& to); - /** - * Converts ASCII text with HTML entities (e.g. &xE9;) to unicode string - */ - irr::core::stringw removeHtmlEntities(const std::string& input); + irr::core::stringw decodeFromHtmlEntities(const std::string& input); + std::string encodeToHtmlEntities(const irr::core::stringw &output); + } // namespace StringUtils #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |