#include "common.h" #include "conv.h" #include "strl.h" #if _MSC_VER #pragma warning( disable: 4706 ) #endif char* strip_html(char *src) { wchar_t* buf=new wchar_t[strlen(src)+1]; MultiByteToWideChar(CP_ACP, 0, src, -1,buf,(strlen(src)+1)*2); wchar_t* stripped_buf=strip_html(buf); delete[] buf; char* dest=new char[wcslen(stripped_buf)+1]; WideCharToMultiByte( CP_ACP, 0, stripped_buf, -1,dest,wcslen(stripped_buf)+1, NULL, NULL ); delete[] stripped_buf; return dest; } wchar_t* strip_html(wchar_t *src) { wchar_t *ptr; wchar_t *ptrl; wchar_t *rptr; wchar_t* dest=wcsldup(src,wcslen(src)); while ((ptr = wcsstr(dest,L"

")) != NULL || (ptr = wcsstr(dest, L"

")) != NULL) { memmove(ptr + 4, ptr + 3, wcslen(ptr + 3)*2 + 2); *ptr = '\r'; *(ptr + 1) = '\n'; *(ptr + 2) = '\r'; *(ptr + 3) = '\n'; } while ((ptr = wcsstr(dest,L"

")) != NULL || (ptr = wcsstr(dest, L"

")) != NULL) { *ptr = L'\r'; *(ptr + 1) = L'\n'; *(ptr + 2) = L'\r'; *(ptr + 3) = L'\n'; } while ((ptr = wcsstr(dest, L"
")) != NULL || (ptr = wcsstr(dest, L"
")) != NULL) { *ptr = L'\r'; *(ptr + 1) = L'\n'; memmove(ptr + 2, ptr + 4, wcslen(ptr + 4)*2 + 2); } while ((ptr = wcsstr(dest, L"
")) != NULL || (ptr = wcsstr(dest, L"
")) != NULL) { *ptr = L'\r'; *(ptr + 1) = L'\n'; memmove(ptr + 2, ptr + 4, wcslen(ptr + 4)*2 + 2); } rptr = dest; /*while (ptr = wcsstr(rptr, L""))) { memmove(ptrl+7,ptrl+1,wcslen(ptrl+1)*2+2); memcpy(ptrl,L" title: ",8*2); wchar_t* s1 = wcsstr(ptrl,L""))) { memmove(ptrl+7,ptrl+1,wcslen(ptrl+1)*2+2); memcpy(ptrl,L" title: ",8*2); wchar_t* s1 = wcsstr(ptrl,L""))) { memmove(ptr, ptrl + 1, wcslen(ptrl + 1)*2 + 2); } else break; } ptrl = NULL; while ((ptr = wcsstr(dest, L""")) != NULL && (ptrl == NULL || ptr > ptrl)) { *ptr = L'"'; memmove(ptr + 1, ptr + 6, wcslen(ptr + 6)*2 + 2); ptrl = ptr; } ptrl = NULL; while ((ptr = wcsstr(dest, L"<")) != NULL && (ptrl == NULL || ptr > ptrl)) { *ptr = L'<'; memmove(ptr + 1, ptr + 4, wcslen(ptr + 4)*2 + 2); ptrl = ptr; } ptrl = NULL; while ((ptr = wcsstr(dest, L">")) != NULL && (ptrl == NULL || ptr > ptrl)) { *ptr = L'>'; memmove(ptr + 1, ptr + 4, wcslen(ptr + 4)*2 + 2); ptrl = ptr; } ptrl = NULL; while ((ptr = wcsstr(dest, L"&")) != NULL && (ptrl == NULL || ptr > ptrl)) { *ptr = L'&'; memmove(ptr + 1, ptr + 5, wcslen(ptr + 5)*2 + 2); ptrl = ptr; } return dest; } char* strip_carrots(char *src)// EAT!!!!!!!!!!!!! { wchar_t* buf=new wchar_t[strlen(src)+1]; MultiByteToWideChar(CP_ACP, 0, src, -1,buf,(strlen(src)+1)*2); wchar_t* stripped_buf=strip_carrots(buf); delete[] buf; char* dest=new char[wcslen(stripped_buf)+1]; WideCharToMultiByte( CP_ACP, 0, stripped_buf, -1,dest,wcslen(stripped_buf)+1, NULL, NULL ); delete[] stripped_buf; return dest; } wchar_t* strip_carrots(wchar_t *src)// EAT!!!!!!!!!!!!! { wchar_t *ptr; wchar_t* dest=wcsldup(src,wcslen(src)); while ((ptr = wcsstr(dest, L"<")) != NULL) { int addr=ptr-dest; dest=renew(dest,wcslen(dest)+2,7); ptr=dest+addr; memmove(ptr + 4, ptr + 1, wcslen(ptr + 1)*2 + 8); memcpy(ptr,L"<",8); } while ((ptr = wcsstr(dest, L">")) != NULL) { int addr=ptr-dest; dest=renew(dest,wcslen(dest)+2,7); ptr=dest+addr; memmove(ptr + 4, ptr + 1, wcslen(ptr + 1)*2 + 8); memcpy(ptr,L">",8); } dest[wcslen(dest)]='\0'; return dest; } char* strip_linebreaks(char *src) { char* dest=strldup(src,lstrlen(src)); char *ptr; while ((ptr = strstr(dest, "\r")) != NULL) { memmove(ptr, ptr + 1, lstrlen(ptr + 1)+1); } while ((ptr = strstr(dest, "\n")) != NULL) { int addr=ptr-dest; dest=renew(dest,lstrlen(dest)+1,7); ptr=dest+addr; memmove(ptr + 4, ptr + 1, lstrlen(ptr + 1) + 4); memcpy(ptr,"
",4); } dest[lstrlen(dest)]='\0'; return dest; } char* html_to_bbcodes(char *src) { wchar_t* buf=new wchar_t[strlen(src)+1]; MultiByteToWideChar(CP_ACP, 0, src, -1,buf,(strlen(src)+1)*2); wchar_t* stripped_buf=html_to_bbcodes(buf); delete[] buf; char* dest=new char[wcslen(stripped_buf)+1]; WideCharToMultiByte( CP_ACP, 0, stripped_buf, -1,dest,wcslen(stripped_buf)+1, NULL, NULL ); delete[] stripped_buf; return dest; } wchar_t* html_to_bbcodes(wchar_t *src) { wchar_t *ptr; wchar_t *ptrl; wchar_t *rptr; wchar_t* dest=wcsldup(src,wcslen(src)); while ((ptr = wcsstr(dest, L"")) != NULL || (ptr = wcsstr(dest, L"")) != NULL) { *ptr = L'['; *(ptr+1) = L'b'; *(ptr+2) = L']'; if((ptr = wcsstr(dest, L"")) != NULL || (ptr = wcsstr(dest, L"")) != NULL) { *ptr = L'['; *(ptr+2) = L'b'; *(ptr+3) = L']'; } else { dest=renew(dest,wcslen(dest)*2+2,5*2); memcpy(&dest[wcslen(dest)],L"[/b]",5*2); } } while ((ptr = wcsstr(dest, L"")) != NULL || (ptr = wcsstr(dest, L"")) != NULL) { *ptr = L'['; *(ptr+1) = L'i'; *(ptr+2) = L']'; if((ptr = wcsstr(dest, L"")) != NULL || (ptr = wcsstr(dest, L"")) != NULL) { *ptr = L'['; *(ptr+2) = L'i'; *(ptr+3) = L']'; } else { dest=renew(dest,wcslen(dest)*2+2,5*2); memcpy(&dest[wcslen(dest)],L"[/i]",5*2); } } while ((ptr = wcsstr(dest, L"")) != NULL || (ptr = wcsstr(dest, L"")) != NULL) { *ptr = L'['; *(ptr+1) = L'u'; *(ptr+2) = L']'; if((ptr = wcsstr(dest, L"")) != NULL || (ptr = wcsstr(dest, L"")) != NULL) { *ptr = L'['; *(ptr+2) = L'u'; *(ptr+3) = L']'; } else { dest=renew(dest,wcslen(dest)*2+2,5*2); memcpy(&dest[wcslen(dest)],L"[/u]",5*2); } } rptr = dest; while (ptr = wcsstr(rptr,L""))) { ptr-=1; memmove(ptr, ptr+1, wcslen(ptr+1)*2 + 2); *(ptr)=L']'; ptrl-=1; wchar_t* s1 = wcsstr(ptrl,L""))) { ptr-=1; memmove(ptr, ptr+1, wcslen(ptr+1)*2 + 2); *(ptr)=L']'; ptrl-=1; wchar_t* s1 = wcsstr(ptrl,L""))) { memmove(ptrl+7,ptr,wcslen(ptr)*2+2); *(ptrl+7)=L']'; ptr=ptrl+7; wchar_t* s1 = wcsstr(ptr,L""))) { memmove(ptrl+7,ptr,wcslen(ptr)*2+2); *(ptrl+7)=L']'; ptr=ptrl+7; wchar_t* s1 = wcsstr(ptr,L""))) { *(ptr)=L']'; if ((ptrl = wcsstr(ptr, L"'; } while ((ptr = wcsstr(dest, L"[/b]")) != NULL) { *ptr = L'<'; *(ptr+2) = L'b'; *(ptr+3) = L'>'; } while ((ptr = wcsstr(dest, L"[i]")) != NULL) { *ptr = L'<'; *(ptr+1) = L'i'; *(ptr+2) = L'>'; } while ((ptr = wcsstr(dest, L"[/i]")) != NULL) { *ptr = L'<'; *(ptr+2) = L'i'; *(ptr+3) = L'>'; } while ((ptr = wcsstr(dest, L"[u]")) != NULL) { *ptr = L'<'; *(ptr+1) = L'u'; *(ptr+2) = L'>'; } while ((ptr = wcsstr(dest, L"[/u]")) != NULL) { *ptr = L'<'; *(ptr+2) = L'u'; *(ptr+3) = L'>'; } rptr = dest; while ((ptr = wcsstr(rptr, L"[color="))) { int addr=ptr-rptr; dest=renew(dest,wcslen(dest)+2,7); rptr=dest; ptr=rptr+addr; memmove(ptr+5, ptr, wcslen(ptr)*sizeof(wchar_t) + 2); memcpy(ptr,L"'; if ((ptr = wcsstr(ptr,L"[/color]"))) { memcpy(ptr,L"",7*sizeof(wchar_t)); memmove(ptr+7,ptr+8,wcslen(ptr+8)*sizeof(wchar_t)+2); } } else rptr++; } while ((ptr = wcsstr(rptr, L"[url="))) { int addr=ptr-rptr; dest=renew(dest,wcslen(dest)+2,7); rptr=dest; ptr=rptr+addr; memmove(ptr+3, ptr, wcslen(ptr)+2); memcpy(ptr,L"'; if ((ptr = wcsstr(ptr, L"[/url]"))) { memcpy(ptr,L"",4*sizeof(wchar_t)); memmove(ptr+4,ptr+6,wcslen(ptr+6)*sizeof(wchar_t)+2); } } else rptr++; } return dest; } void strip_tag(char* begin, char* end) { memmove(begin,end+1,lstrlen(end+1)+1); } void strip_tag(wchar_t* begin, wchar_t* end) { memmove(begin,end+1,wcslen(end+1)+2); } //strip a tag within a string char* strip_tag_within(char* begin, char* end) { while(char* sub_begin=strstr(begin,"<")) { if(sub_begin"); strip_tag(sub_begin,sub_end); end=end-(sub_end-sub_begin)-1; } else break; } return end; } //strip a tag within a string wchar_t* strip_tag_within(wchar_t* begin, wchar_t* end) { while(wchar_t* sub_begin=wcsstr(begin,L"<")) { if(sub_begin"); strip_tag(sub_begin,sub_end); end=end-(sub_end-sub_begin)-1; } else break; } return end; } char* rtf_to_html(HWND hwndDlg,int DlgItem) { char* buf=new char[4024]; int pos=0; int start=0; int end=1; BOOL Bold=false; BOOL Italic=false; BOOL Underline=false; char Face[32]="\0"; COLORREF Color; COLORREF BackColor; int Size=0; GETTEXTLENGTHEX tl; tl.flags=GTL_DEFAULT; tl.codepage=CP_ACP; int length=SendDlgItemMessage(hwndDlg, DlgItem, EM_GETTEXTLENGTHEX,(WPARAM)&tl,0); while(start",4); pos+=3; } else { if(start!=0) { strlcpy(&buf[pos],"",5); pos+=4; } } } if(Italic!=isItalic) { Italic=isItalic; if(isItalic) { strlcpy(&buf[pos],"",4); pos+=3; } else { if(start!=0) { strlcpy(&buf[pos],"",5); pos+=4; } } } if(Underline!=isUnderline) { Underline=isUnderline; if(isUnderline) { strlcpy(&buf[pos],"",4); pos+=3; } else { if(start!=0) { strlcpy(&buf[pos],"",5); pos+=4; } } } if(Size!=isSize||Color!=isColor||BackColor!=isBackColor||strcmp(Face,cfOld.szFaceName)) { Size=isSize; Color=isColor; BackColor=isBackColor; strlcpy(Face,cfOld.szFaceName,strlen(cfOld.szFaceName)+1); if(start!=0) { strlcpy(&buf[pos],"",8); pos+=7; } strlcpy(&buf[pos],">8),chBackColor,16); int len=strlen(chBackColor); if(len<6) { memmove(chBackColor+(6-len),chBackColor,len+1); for(int i=0;i<6;i++) chBackColor[i]='0'; } strlcpy(&buf[pos],chBackColor,7); pos+=6; } if(!(cfOld.dwEffects & CFE_AUTOCOLOR)) { strlcpy(&buf[pos]," color=#",9); pos+=8; char chColor[7]; _itoa((_htonl(Color)>>8),chColor,16); int len=strlen(chColor); if(len<6) { memmove(chColor+(6-len),chColor,len+1); for(int i=0;i<6;i++) chColor[i]='0'; } strlcpy(&buf[pos],chColor,7); pos+=6; } strlcpy(&buf[pos]," size=",7); pos+=6; char chSize[2]; _itoa(Size,chSize,10); strlcpy(&buf[pos],chSize,2); pos++; strlcpy(&buf[pos],">",2); pos++; } if(text[0]=='\r') { strlcpy(&buf[pos],"
",5); pos+=4; } else { strlcpy(&buf[pos],text,2); pos++; } start++; end++; } if(Bold) { strlcpy(&buf[pos],"",5); pos+=4; } if(Italic) { strlcpy(&buf[pos],"",5); pos+=4; } if(Underline) { strlcpy(&buf[pos],"",5); pos+=4; } strlcpy(&buf[pos],"",8); pos+=7; return buf; } #if _MSC_VER #pragma warning( default: 4706 ) #endif