GME
13
|
00001 00002 #ifndef MGA_MgaMetaParser_H 00003 #define MGA_MgaMetaParser_H 00004 00005 #ifndef MGA_GENPARSER_H 00006 #include "GenParser.h" 00007 #endif 00008 00009 #include "resource.h" 00010 #include "CommonVersionInfo.h" 00011 00012 // --------------------------- CMgaMetaParser 00013 00014 class ATL_NO_VTABLE CMgaMetaParser : 00015 public CComObjectRootEx<CComSingleThreadModel>, 00016 public CComCoClass<CMgaMetaParser, &__uuidof(MgaMetaParser)>, 00017 public ISupportErrorInfoImpl<&__uuidof(IMgaMetaParser)>, 00018 public IDispatchImpl<IMgaMetaParser, &__uuidof(IMgaMetaParser), &__uuidof(__MGAParserLib), 1, 1>, 00019 public IGMEVersionInfoImpl, 00020 public CGenParser 00021 { 00022 enum pass_type{FIRST_PASS,SECOND_PASS}; 00023 pass_type currentPass; 00024 bool foundconstraints; 00025 bool explicitguid; 00026 public: 00027 CMgaMetaParser(); 00028 ~CMgaMetaParser(); 00029 00030 DECLARE_REGISTRY_RESOURCEID(IDR_MgaMetaParser) 00031 DECLARE_PROTECT_FINAL_CONSTRUCT() 00032 00033 BEGIN_COM_MAP(CMgaMetaParser) 00034 COM_INTERFACE_ENTRY(IMgaMetaParser) 00035 COM_INTERFACE_ENTRY(IDispatch) 00036 COM_INTERFACE_ENTRY(ISupportErrorInfo) 00037 COM_INTERFACE_ENTRY_IID(__uuidof(IGMEVersionInfo), IGMEVersionInfoImpl) 00038 END_COM_MAP() 00039 00040 // ------- Methods 00041 00042 public: 00043 STDMETHOD(Parse)(BSTR filename, BSTR connection); 00044 00045 HRESULT CloseAll(); 00046 00047 // ------- Attributes 00048 00049 public: 00050 static const std::tstring GetNextToken(std::tstring::const_iterator &i, 00051 std::tstring::const_iterator &e, std::tstring::const_iterator end); 00052 00053 typedef CGenParserFunc<CMgaMetaParser> elementfunc; 00054 00055 static elementfunc elementfuncs_firstpass[]; 00056 static elementfunc elementfuncs_secondpass[]; 00057 00058 CComObjPtr<IMgaMetaProject> metaproject; 00059 00060 // ------- Element Handlers 00061 00062 public: 00063 void StartParadigm(const attributes_type &attributes); 00064 void EndComment(); 00065 void EndAuthor(); 00066 void EndDispName(); 00067 void StartFolder(const attributes_type &attributes); 00068 void StartFolder2(const attributes_type &attributes); 00069 void StartAtom(const attributes_type &attributes); 00070 void StartModel(const attributes_type &attributes); 00071 void StartConnection(const attributes_type &attributes); 00072 void StartReference(const attributes_type &attributes); 00073 void StartSet(const attributes_type &attributes); 00074 void StartAttrDef(const attributes_type &attributes); 00075 void StartFCO2(const attributes_type &attributes); 00076 void StartRole2(const attributes_type &attributes); 00077 void StartAspect2(const attributes_type &attributes); 00078 void StartPart2(const attributes_type &attributes); 00079 void StartRegNode(const attributes_type &attributes); 00080 void StartConnJoint(const attributes_type &attributes); 00081 void StartPointerSpec(const attributes_type &attributes); 00082 void StartPointerItem(const attributes_type &attributes); 00083 void StartEnumItem(const attributes_type &attributes); 00084 void StartConstraint(const attributes_type &attributes); 00085 void EndConstraint(); 00086 void fireStartFunction(const std::tstring& name, const attributes_type& attributes); 00087 void fireEndFunction(const std::tstring& name); 00088 }; 00089 00090 #endif//MGA_MgaMetaParser_H