151 lines
5.1 KiB
C
151 lines
5.1 KiB
C
|
/*
|
||
|
* @doc INTERNAL
|
||
|
*
|
||
|
* @module _RTFWRIT.H -- RichEdit RTF Writer Class Definition |
|
||
|
*
|
||
|
* Description:
|
||
|
* This file contains the type declarations used by the RTF writer
|
||
|
* for the RICHEDIT control
|
||
|
*
|
||
|
* Authors: <nl>
|
||
|
* Original RichEdit 1.0 RTF converter: Anthony Francisco <nl>
|
||
|
* Conversion to C++ and RichEdit 2.0: Murray Sargent
|
||
|
*
|
||
|
* @devnote
|
||
|
* All sz's in the RTF*.? files refer to a LPSTRs, not LPTSTRs, unless
|
||
|
* noted as a szUnicode.
|
||
|
*/
|
||
|
#ifndef __RTFWRIT_H
|
||
|
#define __RTFWRIT_H
|
||
|
|
||
|
#include "_rtfconv.h"
|
||
|
extern const KEYWORD rgKeyword[];
|
||
|
|
||
|
#define PUNCT_MAX 1024
|
||
|
|
||
|
|
||
|
class CRTFWrite ;
|
||
|
|
||
|
|
||
|
class RTFWRITEOLESTREAM : public OLESTREAM
|
||
|
{
|
||
|
OLESTREAMVTBL OLEStreamVtbl; // @member - memory for OLESTREAMVTBL
|
||
|
public:
|
||
|
CRTFWrite *Writer; // @cmember CRTFwriter to use
|
||
|
|
||
|
RTFWRITEOLESTREAM::RTFWRITEOLESTREAM ()
|
||
|
{
|
||
|
lpstbl = & OLEStreamVtbl ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
enum // Control-Word-Format indices
|
||
|
{
|
||
|
CWF_STR, CWF_VAL, CWF_GRP, CWF_AST, CWF_GRV
|
||
|
};
|
||
|
|
||
|
#define chEndGroup RBRACE
|
||
|
|
||
|
/*
|
||
|
* CRTFWrite
|
||
|
*
|
||
|
* @class RTF writer class.
|
||
|
*
|
||
|
* @base public | CRTFConverter
|
||
|
*
|
||
|
*/
|
||
|
class CRTFWrite : public CRTFConverter
|
||
|
{
|
||
|
private:
|
||
|
LONG _cchBufferOut; //@cmember # chars in output buffer
|
||
|
LONG _cchOut; //@cmember Total # chars put out
|
||
|
LONG _cbCharLast; //@cmember # bytes in char last written
|
||
|
BYTE _fBullet; //@cmember Currently in a bulleted style
|
||
|
BYTE _fBulletPending; //@cmember Set if next output should bull
|
||
|
BYTE _fNeedDelimeter; //@cmember Set if next char must be nonalphanumeric
|
||
|
BYTE _fIncludeObjects; //@cmember Set if objects should be included in stream
|
||
|
BYTE _fCheckInTable; //@cmember If set and in table, output intbl stuff
|
||
|
BYTE _fRangeHasEOP; //@cmember Set if _prg has EOP
|
||
|
BYTE _fNCRForNonASCII; //@cmember Put /uN for nonASCII
|
||
|
char * _pchRTFBuffer; //@cmember Ptr to RTF write buffer
|
||
|
BYTE * _pbAnsiBuffer; //@cmember Ptr to buffer used for conversion
|
||
|
char * _pchRTFEnd; //@cmember Ptr to RTF-write-buffer end
|
||
|
LONG _symbolFont; //@cmember Font number of Symbol used by Bullet style
|
||
|
RTFWRITEOLESTREAM RTFWriteOLEStream;//@cmember RTFWRITEOLESTREAM to use
|
||
|
LONG _nHeadingStyle; //@cmember Deepest heading # found
|
||
|
LONG _nNumber; //@cmember Current number in para (1-based)
|
||
|
LONG _nFont; //@cmember Current number font index
|
||
|
LONG _cpg; //@cmember Current number code page
|
||
|
const CParaFormat *_pPF; //@cmember Current para format
|
||
|
|
||
|
// @cmember Build font/color tables
|
||
|
EC BuildTables (CFormatRunPtr& rpCF, CFormatRunPtr &rpPF,
|
||
|
LONG cch, BOOL& fNameIsDBCS);
|
||
|
inline void CheckDelimeter() // @cmember Put ' ' if need delimeter
|
||
|
{
|
||
|
if(_fNeedDelimeter)
|
||
|
{
|
||
|
_fNeedDelimeter = FALSE;
|
||
|
PutChar(' ');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
BOOL CheckInTable (BOOL fPutIntbl);
|
||
|
// @cmember Stream out output buffer
|
||
|
BOOL FlushBuffer ();
|
||
|
// @cmember Get index of <p colorref>
|
||
|
LONG LookupColor (COLORREF colorref);
|
||
|
// @cmember Get font index for <p pCF>
|
||
|
LONG LookupFont (CCharFormat const * pCF);
|
||
|
// @cmember "printf" to output buffer
|
||
|
BOOL _cdecl printF (CONST CHAR * szFmt, ...);
|
||
|
// @cmember Put char <p ch> in output buffer
|
||
|
EC PutBorders (BOOL fInTable);
|
||
|
BOOL PutChar (CHAR ch);
|
||
|
// @cmember Put control word <p iCtrl> with value <p iValue> into output buffer
|
||
|
BOOL PutCtrlWord (LONG iFormat, LONG iCtrl, LONG iValue = 0);
|
||
|
// @cmember Put string <p sz> in output buffer
|
||
|
BOOL Puts (CHAR const * sz, LONG cb);
|
||
|
// @cmember Write char format <p pCF>
|
||
|
EC WriteCharFormat (const CCharFormat *pCF);
|
||
|
EC WriteColorTable (); // @cmember Write color table
|
||
|
EC WriteFontTable (); // @cmember Write font table
|
||
|
EC WriteInfo (); // @cmember Write document info
|
||
|
// @cmember Write para format <p pPF>
|
||
|
EC WriteParaFormat (const CRchTxtPtr * prtp);
|
||
|
// @cmember Write PC data <p szData>
|
||
|
EC WritePcData (const TCHAR * szData, INT nCodePage = CP_ACP, BOOL fIsDBCS = FALSE );
|
||
|
// @cmember Write <p cch> chars of text <p pch>
|
||
|
EC WriteText(LONG cwch, LPCWSTR lpcwstr, INT nCodePage, BOOL fIsDBCS);
|
||
|
EC WriteTextChunk(LONG cwch, LPCWSTR lpcwstr, INT nCodePage, BOOL fIsDBCS);
|
||
|
|
||
|
|
||
|
// OBJECT
|
||
|
EC WriteObject (LONG cp, COleObject *pobj);
|
||
|
BOOL GetRtfObjectMetafilePict(HGLOBAL hmfp, RTFOBJECT &rtfobject, SIZEL &sizelGoal);
|
||
|
BOOL GetRtfObject(REOBJECT &reobject, RTFOBJECT &rtfobject);
|
||
|
EC WriteRtfObject(RTFOBJECT & rtfOb, BOOL fPicture);
|
||
|
BOOL ObjectWriteToEditstream(REOBJECT &reObject, RTFOBJECT &rtfobject);
|
||
|
EC WritePicture(REOBJECT &reObject,RTFOBJECT &rtfObject);
|
||
|
EC WriteDib(REOBJECT &reObject,RTFOBJECT &rtfObject);
|
||
|
|
||
|
enum { MAPTOKWD_ANSI, MAPTOKWD_UNICODE };
|
||
|
inline BOOL MapsToRTFKeywordW(WCHAR wch);
|
||
|
inline BOOL MapsToRTFKeywordA(char ch);
|
||
|
int MapToRTFKeyword(void *pv, int cch, int iCharEncoding);
|
||
|
|
||
|
public:
|
||
|
// @cmember Constructor
|
||
|
CRTFWrite(CTxtRange *prg, EDITSTREAM *pes, DWORD dwFlags);
|
||
|
~CRTFWrite() {FreePv(_pbAnsiBuffer);} // @cmember Destructor
|
||
|
|
||
|
LONG WriteRtf(); // @cmember Main write entry used by
|
||
|
// CLiteDTEngine
|
||
|
LONG WriteData (BYTE * pbBuffer, LONG cbBuffer);
|
||
|
LONG WriteBinData (BYTE * pbBuffer, LONG cbBuffer);
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif // __RTFWRIT_H
|