Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//
// MODULE: TEMPLATEREAD.H
//
// PURPOSE: template file reading classes
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 [email protected]
//
// AUTHOR: Oleg Kalosha
//
// ORIGINAL DATE: 8-12-98
//
// NOTES:
// 1. CTemplateReader has no public methods to apply the template. These must be supplied
// by classes which inherit from CTemplateReader, and these must be supplied in a
// suitably "stateless" manner.
//
// Version Date By Comments
//--------------------------------------------------------------------
// V3.0 08-04-98 OK
//
#ifndef __TEMPLATEREAD_H_
#define __TEMPLATEREAD_H_
#include "fileread.h"
#include <map>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////
// CTemplateInfo
////////////////////////////////////////////////////////////////////////////////////
class CTemplateInfo { CString m_KeyStr; // key text which we will replace with m_SubstitutionStr
CString m_SubstitutionStr; // text we will use to replace m_KeyStr
public: CTemplateInfo(); CTemplateInfo(const CString& key, const CString& substitution); virtual ~CTemplateInfo(); CString& GetKeyStr() {return m_KeyStr;} virtual bool Apply(CString& target) const;
// comparison methods are mainly to keep STL happy. Note that they only look at
// m_KeyStr, not m_SubstitutionStr.
inline BOOL operator == (const CTemplateInfo& two) const { return m_KeyStr == two.m_KeyStr; }
inline BOOL operator < (const CTemplateInfo& two) const { return m_KeyStr < two.m_KeyStr; }
};
////////////////////////////////////////////////////////////////////////////////////
// CTemplateReader
// This class reads template file and provides functionality to substitute key
// sentences with text - do it all at once, or one-by-one.
// The object of this class can be renewed with another template - in this case
// all substitution actions will be performed on new template.
// It can roll back "n" last substitutions
////////////////////////////////////////////////////////////////////////////////////
class CTemplateReader : public CTextFileReader { protected: tstringstream m_StreamOutput; // streamed output, fully or partly substituted template
// (which resides in CFileReader::m_StreamData)
vector<CTemplateInfo> m_arrTemplateInfo; // contains key string - template info
// pairs
public: CTemplateReader(CPhysicalFileReader * pPhysicalFileReader, LPCTSTR szDefaultContents = NULL); ~CTemplateReader();
protected: void SetOutputToTemplate(); CTemplateReader& operator << (CTemplateInfo&); // apply
CTemplateReader& operator >> (CTemplateInfo&); // roll back application for this CTemplateInfo
void GetOutput(CString&);
protected: // overrrides of inherited functions
virtual void Parse(); // parse here is applying ALL elements of m_arrTemplateInfo
// to a virgin template
};
////////////////////////////////////////////////////////////////////////////////////
// a concrete class that just provides simple string substitution
////////////////////////////////////////////////////////////////////////////////////
class CSimpleTemplate : public CTemplateReader { public: CSimpleTemplate(CPhysicalFileReader * pPhysicalFileReader, LPCTSTR szDefaultContents = NULL); ~CSimpleTemplate();
void CreatePage( const vector<CTemplateInfo> & arrTemplateInfo, CString& out ); };
#endif
|