📄 xmlcodec.cpp
字号:
//xmlcodec.cpp
#include "xml.h"
unsigned CXMLDefCodec::xstrSize(const char *val,unsigned len)
{
for(unsigned i=len;i--;++val) if(*val=='`' || *val=='<' || *val=='>' || !*val) ++len;
return len;
}
unsigned CXMLDefCodec::xrawSize(const char *val,unsigned len)
{
for(const char *s=val;(s=strchr(val,'`'))!=0;)
{
++s;
if(s[1]=='`' || s[1]=='(' || s[1]==')'){++s;--len;}
}
return len;
}
//convert '<' as Less'`(', '>' as Greater'`)' and escape '`' by duplicate it'``'
char* CXMLDefCodec::xencode(const char *s,unsigned len,char *t)
{
for(unsigned i=len;i--;++s,++t)
{
switch(*s)
{
case '<':*t++='`';*t='(';break;
case '>':*t++='`';*t=')';break;
case '`':*t++='`';*t='`';break;
default:*t=*s;
}
}
return t;
}
char* CXMLDefCodec::xdecode(const char *s,unsigned len,char *t)
{
for(unsigned i=len;i--;++s,++t)
{
if(*s=='`')
{
++s;
switch(*s)
{
case '(':--i;*t='<';break;
case ')':--i;*t='>';break;
case '`':--i;*t='`';break;
default:*t++='`';*t=*s;
}
}
else *t = *s;
}
return t;
}
unsigned CXMLStdCodec::xstrSize(const char *val,unsigned len)
{
for(unsigned i=len;i--;++val) if(*val=='&' || *val=='<' || *val=='>') ++len;
return len;
}
unsigned CXMLStdCodec::xrawSize(const char *val,unsigned len)
{
for(const char *s=val;(s=strchr(val,'&'))!=0;)
{
if(strncmp(s,">",4)==0){s+=4;len-=3;}
else if(strncmp(s,"<",4)==0){s+=4;len-=3;}
else if(strncmp(s,"&",5)==0){s+=5;len-=4;}
else if(strncmp(s,""",6)==0){s+=6;len-=5;}
else ++s;
}
return len;
}
//escape '"', '<', '>' and '&'
char* CXMLStdCodec::xencode(const char *s,unsigned len,char *t)
{
for(unsigned i=len;i--;++s,++t)
{
switch(*s)
{
case '<':strcpy(t,"<");t+=3;break;
case '>':strcpy(t,">");t+=3;break;
case '&':strcpy(t,"&");t+=4;break;
case '"':strcpy(t,""");t+=5;break;
default:*t=*s;
}
}
return t;
}
char* CXMLStdCodec::xdecode(const char *s,unsigned len,char *t)
{
for(unsigned i=len;i--;)
{
if(*s=='&')
{
if(strncmp(s,"<",4)==0){s+=4;i-=3;*t++='<';}
else if(strncmp(s,">",4)==0){s+=4;i-=3;*t++='>';}
else if(strncmp(s,"&",5)==0){s+=5;i-=4;*t++='&';}
else if(strncmp(s,""",6)==0){s+=6;i-=5;*t++='"';}
else *t++= *s++;
}
else *t++ = *s++;
}
return t;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -