|
|
|
|
|
/*
|
|
|
|
|
|
ԭ<EFBFBD>ȵ<EFBFBD>CXmlParse<EFBFBD><EFBFBD>ȡxml<EFBFBD>ļ<EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><EFBFBD>ӿڵ<EFBFBD>ʹ<EFBFBD>÷<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ö<EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <stack>
|
|
|
|
|
|
#include <list>
|
|
|
|
|
|
#include "layer.h"
|
|
|
|
|
|
#include "pugiconfig.hpp"
|
|
|
|
|
|
#include "pugixml.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
class AFX_EXT_CLASS CKXmlParse //ggff20250614
|
|
|
|
|
|
{
|
|
|
|
|
|
protected:
|
|
|
|
|
|
typedef struct _xmlParseNode
|
|
|
|
|
|
{
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
pugi::xml_node node;
|
|
|
|
|
|
}KXMLPARSENODE;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
CKXmlParse(void);
|
|
|
|
|
|
virtual ~CKXmlParse(void);
|
|
|
|
|
|
void Clear(void);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL SetXmlFileBuffer(char* pBuffer,ULONG64 bufLen);
|
|
|
|
|
|
BOOL ReadXmlFile(char* filePath);
|
|
|
|
|
|
|
|
|
|
|
|
//CString ReadFileName(CFile& fr);
|
|
|
|
|
|
//<2F><>ȡһ<C8A1><D2BB>XML<4D><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>ּ<EFBFBD><D6BC><EFBFBD>ֵ
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>XML<4D><4C><EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>ؼ<EFBFBD><D8BC>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>m_strKey<65>У<EFBFBD><D0A3><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_valArray<61><79>
|
|
|
|
|
|
int ReadBeginSection();
|
|
|
|
|
|
int ReadEndSection();
|
|
|
|
|
|
|
|
|
|
|
|
BOOL IsIncludeValue(void);
|
|
|
|
|
|
//<2F><>ȡһ<C8A1><D2BB>XML<4D><4C>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ո<EFBFBD><D5B8><EFBFBD>TAB<41><42><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><<3C><><EFBFBD><EFBFBD>ʾһ<CABE>¶εĿ<CEB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ʾ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>¶εĿ<CEB5>ʼ
|
|
|
|
|
|
BOOL ReadValue();
|
|
|
|
|
|
//BOOL ReadInner(CFile& fr);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>Сд<D0A1>Ƚϼ<C8BD>ֵ
|
|
|
|
|
|
BOOL IsKey(CString lpszKeyString); //<2F>뵱ǰm_strKeyֵ<79>Ƚ<EFBFBD>
|
|
|
|
|
|
BOOL IsKey(const CString& key, LPCTSTR lpszKeyString);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL ParaseKeyValue(CString strKeyValue, CString& key, CString& val); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>=<3D>ָ<EFBFBD>KEY<45><59>VALUE
|
|
|
|
|
|
BOOL ParaseKeyValue(int nIndex, CString& key, CString& val); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>=<3D>ָ<EFBFBD>KEY<45><59>VALUE
|
|
|
|
|
|
|
|
|
|
|
|
int ReadRect( CRect8& rect); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>η<EFBFBD>ΧDML<4D>ؼ<EFBFBD>д<EFBFBD><D0B4>ֵ
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ<EFBFBD><C8A1><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3><EFBFBD>Ҫ<EFBFBD><D2AA>Ԫ<EFBFBD><D4AA>
|
|
|
|
|
|
int ParaseAndReadRect(CRect8& rect);
|
|
|
|
|
|
int ParaseLayer(CLayer* pLayer, void* pxy);
|
|
|
|
|
|
int ParaseFont(LOGFONT& logFont, CSize8& size);
|
|
|
|
|
|
int ParaseFont(LOGFONT& logFont, CSize8& size, COLORREF& color, int& script);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int DML_ParaseHowToViewCurve(CHowToViewCurve* phtv, void* pxy);
|
|
|
|
|
|
int DML_ParaseHowToViewPoint(CHowToViewPoint* phtp, void* pxy);
|
|
|
|
|
|
int DML_WriteMemoryBlock(CFile& fw, BYTE* lpData, DWORD nDataLength, LPCTSTR strType, int nBaseTabNum = 0);
|
|
|
|
|
|
BYTE* DML_ReadMemoryBlock(CFile& fr, DWORD& nOutDataLength, CString& strType);
|
|
|
|
|
|
|
|
|
|
|
|
int PCG_ParaseHowToViewCurve(CHowToViewCurve* phtv, void* pxy, std::vector<CString>&keys, std::vector<CString>&props);
|
|
|
|
|
|
int PCG_ParaseHowToViewPoint(CHowToViewPoint* phtp, void* pxy, std::vector<CString>&keys, std::vector<CString>&props);
|
|
|
|
|
|
int PCG_WriteMemoryBlock(CFile& fw, BYTE* lpData, DWORD nDataLength, LPCTSTR strType, const short& ver = 0, int nBaseTabNum = 0);
|
|
|
|
|
|
BYTE* PCG_ReadMemoryBlock(DWORD& nOutDataLength, CString& strType);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL IsEndSection();// { return m_bOneLineEndSection; } //ggff2025
|
|
|
|
|
|
int ParaseAndReadCoordinate( CPointList& coords);
|
|
|
|
|
|
int ParaseAndReadList(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>m_valArray<61><79>
|
|
|
|
|
|
BOOL CurrentNodeHasChild() { return m_bCurrendNodeHasChild; }
|
|
|
|
|
|
|
|
|
|
|
|
void InitRootNode(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>´<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
protected:
|
|
|
|
|
|
//int ReadSection(CFile& fr, BOOL bBegin); //<2F><>ȡһ<C8A1><D2BB>XML<4D><4C><EFBFBD>俪ʼ<E4BFAA><CABC><EFBFBD><EFBFBD>Ϊ<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ>
|
|
|
|
|
|
//int ReadValueOne(CFile& fr, BOOL *bNewSection); //<2F><>ȡһ<C8A1><D2BB>XML<4D><4C>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<
|
|
|
|
|
|
void ConvertCopy(char * &line,int len, char* &dest);
|
|
|
|
|
|
//int ScanfString(CStringArray &m_type, char* str, int len);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL m_bIncludeValue;
|
|
|
|
|
|
|
|
|
|
|
|
void MakeStrToArr1(CString str, CStringArray &StrArr, CString splitStr);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
BOOL m_bOneLineEndSection; //ggff 2025 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<6D><6C><EFBFBD>䣬ReadBeginSectionֻ<6E>Ƕ<EFBFBD>ȡ< ><3E>е<EFBFBD><D0B5><EFBFBD><EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> < > <20><>< /> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><Title></Title> <20><> <Title /><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CString m_strKey;
|
|
|
|
|
|
std::vector<CString> m_valArray; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<CString> m_propValArray;// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
CString m_nodeStrValue;
|
|
|
|
|
|
CString FormatFontDML(LOGFONT& lf, CSize8& size, LPCTSTR elementName = nullptr);
|
|
|
|
|
|
CString FormatFontPCG(LOGFONT& lf, CSize8& size);
|
|
|
|
|
|
CString FormatFontPCG(LOGFONT& lf, CSize8& size, COLORREF& color, int script);
|
|
|
|
|
|
|
|
|
|
|
|
void SetDelimiter(char c) { m_cDelimiter = c; }; //ggff2025 xml<6D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ķָ<C4B7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>¡<EFBFBD>
|
|
|
|
|
|
static CString SetEscapeCharToChar(CString& str); //<2F>滻<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ַ<EFBFBD> ggff2025
|
|
|
|
|
|
static CString SetCharToEscapeChar(CString& str);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
char m_cDelimiter;
|
|
|
|
|
|
|
|
|
|
|
|
pugi::xml_document m_xmlDoc;
|
|
|
|
|
|
BOOL m_bHaveXml;
|
|
|
|
|
|
pugi::xml_node m_CurrentNode;
|
|
|
|
|
|
//pugi::xml_node_iterator m_CurrentNodeIt;
|
|
|
|
|
|
//pugi::xml_node m_ParentNode;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//std::stack< pugi::xml_node_iterator> m_nodeItStack;
|
|
|
|
|
|
std::list< KXMLPARSENODE> m_nodeList;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL m_bUtf8;
|
|
|
|
|
|
|
|
|
|
|
|
//bool hasUtf8Bom(const std::string& filename);
|
|
|
|
|
|
//bool isUtf8Declared(const pugi::xml_document& doc);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL isUtf8(CString strPathName);
|
|
|
|
|
|
BOOL m_bCurrendNodeHasChild;
|
|
|
|
|
|
};
|