From 50b715009438967fa9b37a62649db216ce8021b7 Mon Sep 17 00:00:00 2001 From: sje Date: Wed, 25 Apr 2007 15:34:26 +0000 Subject: git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@145 4f64403b-2f21-0410-a795-97e2b3489a10 --- nohtml/conv.cpp | 802 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 802 insertions(+) create mode 100644 nohtml/conv.cpp (limited to 'nohtml/conv.cpp') diff --git a/nohtml/conv.cpp b/nohtml/conv.cpp new file mode 100644 index 0000000..accf524 --- /dev/null +++ b/nohtml/conv.cpp @@ -0,0 +1,802 @@ +#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 -- cgit v1.2.3