//------------------------------------------------------------------------------ // // File: impfile.h // Copyright (C) 1995-1997 Microsoft Corporation // All rights reserved. // // Declaration of CLocImpFile, which provides the ILocFile interface for // the parser // // MAJOR IMPLEMENTATION FILE. // // Owner: // //------------------------------------------------------------------------------ #ifndef IMPFILE_H #define IMPFILE_H const FileType ftMNCFileType = ftUnknown + 1; class CLocImpFile : public ILocFile, public CLObject { public: CLocImpFile(ILocParser *); protected: // // Standard IUnknown methods // STDMETHOD_(ULONG, AddRef)(); STDMETHOD_(ULONG, Release)(); STDMETHOD(QueryInterface)(REFIID iid, LPVOID* ppvObj); // // Standard Debugging interfaces // STDMETHOD_(void, AssertValidInterface)(THIS) CONST_METHOD; // // ILocFile methods. // STDMETHOD_(BOOL, OpenFile)(const CFileSpec REFERENCE, CReporter REFERENCE); STDMETHOD_(FileType, GetFileType)() const; STDMETHOD_(void, GetFileTypeDescription)(CLString REFERENCE) const; STDMETHOD_(BOOL, GetAssociatedFiles)(CStringList REFERENCE) const; STDMETHOD_(BOOL, EnumerateFile)(CLocItemHandler REFERENCE, const CLocLangId &, const DBID REFERENCE); STDMETHOD_(BOOL, GenerateFile)(const CPascalString REFERENCE, CLocItemHandler REFERENCE, const CLocLangId REFERENCE, const CLocLangId REFERENCE, const DBID REFERENCE); // // CLObect implementation // #ifdef LTASSERT_ACTIVE void AssertValid() const; #endif private: IStream * m_pstmTargetString; IStorage * m_pstgTargetStringTable; IStorage * m_pstgTargetParent; DWORD m_dwCountOfStringTables; IStream * m_pstmSourceString; IStorage * m_pstgSourceStringTable; IStorage * m_pstgSourceParent; DWORD m_dwCountOfStrings; CLSID m_clsidSnapIn; DWORD m_dwID,m_dwRefCount; bool m_bXMLBased; CComQIPtr m_spStringTablesNode; CComQIPtr m_spTargetStringTablesNode; private: BOOL GenerateStrings(CLocItemHandler & ihItemHandler,CLocItemSet &isItemSet); BOOL OpenStream(BOOL fGenerating); BOOL AddItemToSet(CLocItemSet & isItemSet,const DBID &dbidNodeId,DWORD dwID,LPCSTR szTemp); BOOL ProcessStrings(CLocItemHandler &ihItemHandler,const DBID &dbidFileId,BOOL fGenerating); BOOL ProcessXMLStrings(CLocItemHandler &ihItemHandler,const DBID &dbidFileId,BOOL fGenerating); BOOL EnumerateStrings(CLocItemHandler &ihItemHandler,const DBID &dbidFileId, BOOL fGenerating ); BOOL CreateChildNode(CLocItemHandler & ihItemHandler,const DBID &dbidFileId, DBID & pNewParentId,const char *szNodeRes,const char *szNodeString); BOOL CreateParentNode(CLocItemHandler & ihItemHandler,const DBID &dbidFileId, DBID & pNewParentId,const char *szNodeRes,const char *szNodeString); // // Private methods to prevent callers access. // ~CLocImpFile(); CLocImpFile(); const CLocImpFile &operator=(const CLocImpFile &); // // Private data for C.O.M. implementation // ILocParser *m_pParentClass; ULONG m_ulRefCount; // // Framework data. // enum ImpFileError { ImpNoError, ImpSourceError, ImpTargetError, ImpEitherError, ImpNeitherError // For errors which aren't really in files. // TODO: Add more error types here if you need them. }; CPascalString m_pstrFileName; // Filename of source file. DBID m_idFile; CPascalString m_pstrTargetFile; // Filename of target file, set // only when generating. CLFile *m_pOpenSourceFile; // File object for source file. CLFile *m_pOpenTargetFile; // File object for target file, set // only when generating. CReporter *m_pReporter; // Reporter object used to display messages. // THIS POINTER IS VALID ONLY DURING CALLS TO // OpenFile(), EnumerateFile(), GenerateFile(), // and anything called from them. If it is // not valid, it is guaranteed to be NULL. FileType m_FileType; // Type (ft* constant above) for this file. CodePage m_cpSource; // ANSI code page for source file. CodePage m_cpTarget; // ANSI code page for target file, set // only when generating. // // Parser-specific data. // // // Private implementation functions. // BOOL Verify(); // // Handy utility functions. TODO: Except for ReportException(), they should // be removed if not used. Note ReportMessage() is used by other utility // functions. // void ReportException(CException *pException, // DO NOT EVER REMOVE! ImpFileError WhichFile = ImpSourceError) const; void ReportMessage(MessageSeverity sev, UINT nMsgId, // REMOVE CAREFULLY! ImpFileError WhichFile = ImpSourceError) const; }; #endif // IMPFILE_H