00001
00002 #ifndef MiX_DEFAULTXMLTRAITS_H_
00003 #define MiX_DEFAULTXMLTRAITS_H_
00004
00005 #include <string>
00006 #include <cctype>
00007 #include "config.h"
00008
00009 namespace MiX{
00010
00011 template <class charT,class char_traits>
00012 class DefaultXMLTraits{
00013 public:
00014 typedef std::basic_string<charT,char_traits> basic_string_type;
00015 private:
00016 static basic_string_type makeString(const char* szSrc);
00017
00018 public:
00020 static charT null(){ return static_cast<charT>('\0'); }
00022 static charT cr(){ return static_cast<charT>('\r'); }
00024 static charT lf(){ return static_cast<charT>('\n'); }
00026 static charT sp(){ return static_cast<charT>(' '); }
00028 static charT tab(){ return static_cast<charT>('\t'); }
00029
00031 static charT lt(){ return static_cast<charT>('<'); }
00033 static charT eq(){ return static_cast<charT>('='); }
00035 static charT gt(){ return static_cast<charT>('>'); }
00036
00038 static charT slash(){ return static_cast<charT>('/'); }
00040 static charT hyphen(){ return static_cast<charT>('-'); }
00042 static charT colon() { return static_cast<charT>(':'); }
00044 static charT semicolon(){ return static_cast<charT>(';'); }
00045
00047 static charT exclamation(){ return static_cast<charT>('!'); }
00049 static charT question(){ return static_cast<charT>('?'); }
00051 static charT amp(){ return static_cast<charT>('&'); }
00052
00054 static charT dblquote() { return static_cast<charT>('\"'); }
00056 static charT quote() { return static_cast<charT>('\''); }
00057
00059 static charT sharp() { return static_cast<charT>('#'); }
00060
00062 static charT lsb() { return static_cast<charT>('['); }
00063
00065 static charT rsb() { return static_cast<charT>(']'); }
00066
00068 static charT atmark() { return static_cast<charT>('@'); }
00069
00070
00071
00073
00074 return makeString("xml");
00075 }
00077 static basic_string_type cdata(){
00078 return makeString("CDATA");
00079 }
00081 static basic_string_type str_lt(){
00082 return makeString("lt");
00083 }
00085 static basic_string_type str_gt(){
00086 return makeString("gt");
00087 }
00089 static basic_string_type str_amp(){
00090 return makeString("amp");
00091 }
00093 static basic_string_type str_quot(){
00094 return makeString("quot");
00095 }
00097 static basic_string_type str_apos(){
00098 return makeString("apos");
00099 }
00100
00102 static basic_string_type str_xmlns(){
00103 return makeString("xmlns");
00104 }
00105
00107 static basic_string_type indent(){
00108 return makeString("\t");
00109 }
00110
00112 static basic_string_type crlf(){ return makeString("\n"); }
00113
00122 static int ci_compare(const charT* s1,const charT* s2,size_t n){
00123 for(size_t i=0;i<n;i++){
00124 int c1,c2;
00125 c1 = std::tolower(static_cast<int>(s1[i]));
00126 c2 = std::tolower(static_cast<int>(s2[i]));
00127 if(c1>c2) return 1;
00128 if(c1<c2) return -1;
00129 }
00130 return 0;
00131 }
00132
00134 static bool str2char( const charT *str, charT &ch )
00135 {
00136 ch = 0;
00137 if( *str==static_cast<charT>('x') ) {
00138 ++str;
00139 for( ; *str ; ++str ) {
00140 int i;
00141 ch *= 16;
00142 if( static_cast<charT>('0')<=*str && *str<=static_cast<charT>('9') )
00143 i = *str - static_cast<charT>('0');
00144 else if( static_cast<charT>('A')<=*str &&
00145 *str<=static_cast<charT>('F') )
00146 i = *str - static_cast<charT>('A');
00147 else if( static_cast<charT>('a')<=*str &&
00148 *str<=static_cast<charT>('f') )
00149 i = *str - static_cast<charT>('a');
00150 else return false;
00151 ch += i;
00152 }
00153 } else {
00154
00155 for( ; *str ; ++str ) {
00156 if(!(static_cast<charT>('0')<=*str && *str<=static_cast<charT>('9')))
00157 return false;
00158 ch = ch*10 + (*str - static_cast<charT>('0'));
00159 }
00160 }
00161 return true;
00162 }
00163
00164 };
00165 }
00166
00167 #ifndef MiX_DEFAULTXMLTRAITS_CPP_
00168 #include "DefaultXMLTraits.cpp"
00169 #endif
00170
00171 #endif