From 036428b1f75d480617d5df454dc28a5adb941d26 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Wed, 4 May 2011 19:12:23 +0000 Subject: added MRA git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@67 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- MRA/MraRTFMsg.cpp | 341 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 MRA/MraRTFMsg.cpp (limited to 'MRA/MraRTFMsg.cpp') diff --git a/MRA/MraRTFMsg.cpp b/MRA/MraRTFMsg.cpp new file mode 100644 index 0000000..e0c3a1d --- /dev/null +++ b/MRA/MraRTFMsg.cpp @@ -0,0 +1,341 @@ +#include "Mra.h" +#include "MraRTFMsg.h" + + + +#define COLORTABLE_COUNT 8 +#define RTF_COLORTBLCOLOURS "\\red255\\green0\\blue0;\\red0\\green255\\blue0;\\red0\\green0\\blue255;\\red255\\green0\\blue255;\\red255\\green255\\blue0;\\red0\\green255\\blue255;\\red0\\green0\\blue0;\\red255\\green255\\blue255;" +static const LPSTR lpszColours[COLORTABLE_COUNT]= +{ + "red", + "green", + "blue", + "magenta", + "yellow", + "cyan", + "black", + "white" +}; + + + +#define CRLF "\r\n" +#define PAR "\\par " + + +#define BB_COLOR_TAG "[color=" +#define SIMBOLS_COUNT 19 +static const LPSTR lpszSimbols[SIMBOLS_COUNT]= +{ + "\r\n", + "\\", + "{", + "}", + "[b]", + "[/b]", + "[u]", + "[/u]", + "[i]", + "[/i]", + "[/color]", + "[color=red]", + "[color=green]", + "[color=blue]", + "[color=magenta]", + "[color=yellow]", + "[color=cyan]", + "[color=black]", + "[color=white]", +}; + +static const SIZE_T dwcSimbolsCount[SIMBOLS_COUNT]= +{ + 2, + 1, + 1, + 1, + 3, + 4, + 3, + 4, + 3, + 4, + 8, + 11, + 13, + 12, + 15, + 14, + 12, + 13, + 13, +}; + +static const LPSTR lpszRTFTags[SIMBOLS_COUNT]= +{ + "\\par", + "\\\\", + "\\{", + "\\}", + "{\\b ", + "}", + "{\\ul ", + "}", + "{\\i ", + "}", + "}", + "{\\cf2 ", + "{\\cf3 ", + "{\\cf4 ", + "{\\cf5 ", + "{\\cf6 ", + "{\\cf7 ", + "{\\cf8 ", + "{\\cf9 ", +}; + +static const SIZE_T dwcRTFTagsCount[SIMBOLS_COUNT]= +{ + 4, + 2, + 2, + 2, + 4, + 1, + 5, + 1, + 4, + 1, + 1, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, +}; + + +DWORD MraTextToRTFData(LPSTR lpszMessage,SIZE_T dwMessageSize,LPSTR lpszMessageConverted,SIZE_T dwMessageConvertedBuffSize,SIZE_T *pdwMessageConvertedSize); + + +BOOL MraIsMessageFlashAnimation(LPWSTR lpwszMessage,SIZE_T dwMessageSize) +{ + BOOL bRet=FALSE; + LPWSTR lpwszFounded; + + dwMessageSize*=sizeof(WCHAR); + lpwszFounded=(LPWSTR)MemoryFind(0,lpwszMessage,dwMessageSize,L"id=flas",28); + if (lpwszFounded) + { + if (MemoryFind(((lpwszFounded-lpwszMessage)+32),lpwszMessage,dwMessageSize,L"'",18)) bRet=TRUE; + } +return(bRet); +} + + + +DWORD MraTextToRTFData(LPSTR lpszMessage,SIZE_T dwMessageSize,LPSTR lpszMessageConverted,SIZE_T dwMessageConvertedBuffSize,SIZE_T *pdwMessageConvertedSize) +{ + DWORD dwRetErrorCode=NO_ERROR; + + if (lpszMessage && dwMessageSize && lpszMessageConverted && dwMessageConvertedBuffSize) + { + BYTE tm,bCurByte; + LPSTR lpszMessageConvertedCur,lpszMessageConvertedMax; + SIZE_T i; + + lpszMessageConvertedCur=lpszMessageConverted; + lpszMessageConvertedMax=(lpszMessageConverted+dwMessageConvertedBuffSize); + for(i=0;(i3);i++) + { + //lpszMessageConvertedCur+=mir_snprintf(lpszMessageConvertedCur,8,"\\'%x",(*((BYTE*)lpszMessage+i))); + + (*((WORD*)lpszMessageConvertedCur))=(*((WORD*)"\\'")); + bCurByte=(*((BYTE*)lpszMessage+i)); + tm=(bCurByte>>4)&0xf; + lpszMessageConvertedCur[2]=(tm>9)? ('a'+tm-10):('0'+tm); + + tm=bCurByte&0xf; + lpszMessageConvertedCur[3]=(tm>9)? ('a'+tm-10):('0'+tm); + lpszMessageConvertedCur+=4; + (*((BYTE*)lpszMessageConvertedCur))=0; + } + if (pdwMessageConvertedSize) (*pdwMessageConvertedSize)=(lpszMessageConvertedCur-lpszMessageConverted); + }else{ + if (pdwMessageConvertedSize) (*pdwMessageConvertedSize)=0; + dwRetErrorCode=ERROR_INVALID_HANDLE; + } +return(dwRetErrorCode); +} + + +DWORD MraSybolsToRTFTags(DWORD dwFlags,LPSTR lpszMessage,SIZE_T dwMessageSize,LPSTR lpszMessageConverted,SIZE_T dwMessageConvertedBuffSize,SIZE_T *pdwMessageConvertedSize) +{ + DWORD dwRetErrorCode=NO_ERROR; + LPSTR lpszFounded[SIMBOLS_COUNT],lpszMessageConvertedCur,lpszMessageCur,lpszMessageCurPrev,lpszMessageConvertedMax; + SIZE_T i,dwFirstFoundedIndex=0,dwFoundedCount=0,dwMemPartToCopy; + +#ifdef _DEBUG //check table + for(i=0;i(lpszMessageConvertedCur+(dwMemPartToCopy+dwcRTFTagsCount[dwFirstFoundedIndex]))) + { + //memmove(lpszMessageConvertedCur,lpszMessageCurPrev,dwMemPartToCopy);lpszMessageConvertedCur+=dwMemPartToCopy; + MraTextToRTFData(lpszMessageCurPrev,dwMemPartToCopy,lpszMessageConvertedCur,(lpszMessageConvertedMax-lpszMessageConvertedCur),&i);lpszMessageConvertedCur+=i; + memmove(lpszMessageConvertedCur,lpszRTFTags[dwFirstFoundedIndex],dwcRTFTagsCount[dwFirstFoundedIndex]);lpszMessageConvertedCur+=dwcRTFTagsCount[dwFirstFoundedIndex]; + lpszMessageCurPrev=(lpszFounded[dwFirstFoundedIndex]+dwcSimbolsCount[dwFirstFoundedIndex]); + + for(i=0;i=(lpszMessageRTFCur+sizeof(PAR)+sizeof(CRLF)+2)) + { + memmove(lpszMessageRTFCur,PAR,sizeof(PAR));lpszMessageRTFCur+=(sizeof(PAR)-1); + memmove(lpszMessageRTFCur,CRLF,sizeof(CRLF));lpszMessageRTFCur+=(sizeof(CRLF)-1); + memmove(lpszMessageRTFCur,"}",2);lpszMessageRTFCur+=2; + if (pdwMessageRTFSize) (*pdwMessageRTFSize)=(lpszMessageRTFCur-lpszMessageRTF); + DebugPrintCRLFA(lpszMessageRTF); + dwRetErrorCode=NO_ERROR; + }else{ + if (pdwMessageRTFSize) (*pdwMessageRTFSize)=dwMessageRTFBuffSize+1024; + dwRetErrorCode=ERROR_BUFFER_OVERFLOW; + DebugBreak(); + } + } + MEMFREE(lpszMessage); + } + }else{ + if (pdwMessageRTFSize) (*pdwMessageRTFSize)=dwMessageSize; + dwRetErrorCode=ERROR_BUFFER_OVERFLOW; + DebugBreak(); + } + }else{ + dwRetErrorCode=ERROR_INVALID_HANDLE; + } +return(dwRetErrorCode); +} + + + -- cgit v1.2.3