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