| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #ifndef __UIMARKUP_H__
- #define __UIMARKUP_H__
- #include "SkinUI.h"
- #pragma once
- enum
- {
- XMLFILE_ENCODING_UTF8 = 1,
- XMLFILE_ENCODING_UNICODE = 2,
- XMLFILE_ENCODING_ASNI = 3,
- };
- class CXmlManager;
- class CXmlNode;
- class StringOrID
- {
- public:
- StringOrID(LPCTSTR lpString) : m_lpstr(lpString)
- { }
- StringOrID(UINT nID) : m_lpstr(MAKEINTRESOURCE(nID))
- { }
- LPCTSTR m_lpstr;
- };
- class SKINUI_CLASS CXmlManager
- {
- friend CXmlNode;
- public:
- CXmlManager(LPCTSTR pstrXML = NULL);
- ~CXmlManager();
- bool Load(LPCTSTR pstrXML);
- bool LoadFromMem(BYTE* pByte, DWORD dwSize, int encoding = XMLFILE_ENCODING_UTF8);
- bool LoadFromFile(LPCTSTR pstrFilename, int encoding = XMLFILE_ENCODING_UTF8);
- void Release();
- bool IsValid() const;
- void SetPreserveWhitespace(bool bPreserve = true);
- void GetLastErrorMessage(LPTSTR pstrMessage, SIZE_T cchMax) const;
- void GetLastErrorLocation(LPTSTR pstrSource, SIZE_T cchMax) const;
- CXmlNode GetRoot();
- private:
- typedef struct tagXMLELEMENT
- {
- ULONG iStart;
- ULONG iChild;
- ULONG iNext;
- ULONG iParent;
- ULONG iData;
- } XMLELEMENT;
- LPTSTR m_pstrXML;
- XMLELEMENT* m_pElements;
- ULONG m_nElements;
- ULONG m_nReservedElements;
- TCHAR m_szErrorMsg[100];
- TCHAR m_szErrorXML[50];
- bool m_bPreserveWhitespace;
- private:
- bool _Parse();
- bool _Parse(LPTSTR& pstrText, ULONG iParent);
- XMLELEMENT* _ReserveElement();
- inline void _SkipWhitespace(LPTSTR& pstr) const;
- inline void _SkipWhitespace(LPCTSTR& pstr) const;
- inline void _SkipIdentifier(LPTSTR& pstr) const;
- inline void _SkipIdentifier(LPCTSTR& pstr) const;
- bool _ParseData(LPTSTR& pstrText, LPTSTR& pstrData, char cEnd);
- void _ParseMetaChar(LPTSTR& pstrText, LPTSTR& pstrDest);
- bool _ParseAttributes(LPTSTR& pstrText);
- bool _Failed(LPCTSTR pstrError, LPCTSTR pstrLocation = NULL);
- };
- class SKINUI_CLASS CXmlNode
- {
- friend CXmlManager;
- private:
- CXmlNode();
- CXmlNode(CXmlManager* pOwner, int iPos);
- public:
- bool IsValid() const;
- CXmlNode GetParent();
- CXmlNode GetSibling();
- CXmlNode GetChild();
- CXmlNode GetChild(LPCTSTR pstrName);
- bool HasSiblings() const;
- bool HasChildren() const;
- LPCTSTR GetName() const;
- LPCTSTR GetValue() const;
- bool HasAttributes();
- bool HasAttribute(LPCTSTR pstrName);
- int GetAttributeCount();
- LPCTSTR GetAttributeName(int iIndex);
- LPCTSTR GetAttributeValue(int iIndex);
- LPCTSTR GetAttributeValue(LPCTSTR pstrName);
- bool GetAttributeValue(int iIndex, LPTSTR pstrValue, SIZE_T cchMax);
- bool GetAttributeValue(LPCTSTR pstrName, LPTSTR pstrValue, SIZE_T cchMax);
- private:
- void _MapAttributes();
- enum { MAX_XML_ATTRIBUTES = 64 };
- typedef struct
- {
- ULONG iName;
- ULONG iValue;
- } XMLATTRIBUTE;
- int m_iPos;
- int m_nAttributes;
- XMLATTRIBUTE m_aAttributes[MAX_XML_ATTRIBUTES];
- CXmlManager* m_pOwner;
- };
- #endif // __UIMARKUP_H__
|