00001 /* 00002 * Copyright (C) 2001 Karsten Reincke <karsten.reincke@gnukose.org> 00003 * 00004 * This program is free software; you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation; either version 2 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, write to the Free Software 00016 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 * 00018 * file <muo_convert.h> version <#1.3.1#> of project <MrProjext> 00019 */ 00020 00027 #ifndef CONVERTER_H 00028 #define CONVERTER_H 00029 00030 #ifdef HAVE_CONFIG_H 00031 #include <config.h> 00032 #endif 00033 00034 #include <string> 00035 #include <map> 00036 #include "muo_convert_table.h" 00037 /* &&& exported preprocessor-defines &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00038 00039 /* &&& class-declarations &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00040 00041 using namespace std; 00042 00043 namespace krmuo 00044 { 00045 00065 class Converter 00066 { 00067 public: 00068 /* &&& attributes &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00069 protected: 00070 string::const_iterator 00071 mUnConvertedStringIterator; 00072 string::const_iterator 00073 mUnConvertedStringEnd; 00074 string mUnConvertedToken; 00075 string mConvertedToken; 00076 string mConvertedString; 00077 char mUtf8Sign[20]; 00078 string mUtf8String; 00079 00080 krmuo::CodeTokenMap* mTokenMap; 00081 /* &&& methods &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00082 public: 00083 00087 Converter(); 00088 virtual ~Converter(); 00089 00093 const string decode(const string& pUnDecodedString); 00094 00098 const string encode(const string& pUnEncodedString); 00099 00100 private: 00104 bool isDecodableEmbeddedUtf8Token(const string& pUtf8Token, unsigned char& pSign); 00105 00109 bool getNextUnDecodedToken(string& pUnDecodedToken); 00110 00114 bool isUtf8EncodableSign(const unsigned char pSign, string& pUtf8Token); 00115 00116 }; 00117 00122 class HtmlConverter:public Converter 00123 { 00124 00125 /* &&& attributes &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00126 private: 00127 krmuo::HtmlCodeTokenMap mHtmlCodeTokenMap; 00128 /* &&& methods &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00129 00130 public: 00131 00135 HtmlConverter(); 00136 virtual ~HtmlConverter(); 00137 00138 }; 00139 00144 class XmlConverter:public Converter 00145 { 00146 00147 /* &&& attributes &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00148 private: 00149 krmuo::XmlCodeTokenMap mXmlCodeTokenMap; 00150 00151 /* &&& methods &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00152 00153 public: 00154 00158 XmlConverter(); 00159 virtual ~XmlConverter(); 00160 00161 }; 00162 00167 class UrlConverter:public Converter 00168 { 00169 00170 /* &&& attributes &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00171 private: 00172 krmuo::UrlCodeTokenMap mUrlCodeTokenMap; 00173 00174 /* &&& methods &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ 00175 00176 public: 00177 00181 UrlConverter(); 00182 virtual ~UrlConverter(); 00183 00186 const string decode(const string& pUnDecodedString); 00187 00191 const string encode(const string& pUnEncodedString); 00192 00193 private: 00197 bool isDecodableEmbeddedUtf8Token(const string& pUtf8Token, unsigned char& pSign); 00198 00202 bool getNextUnDecodedToken(string& pUnDecodedToken); 00203 00207 bool isUtf8EncodableSign(const unsigned char pSign, string& pUtf8Token); 00208 }; 00209 00210 00211 } 00212 00213 #endif