windows-nt/Source/XPSP1/NT/admin/activec/locparser/impfile.h
2020-09-26 16:20:57 +08:00

154 lines
4.6 KiB
C++

//------------------------------------------------------------------------------
//
// 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<IXMLDOMNode> m_spStringTablesNode;
CComQIPtr<IXMLDOMNode> 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