XTPMarkupParser.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:3k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupParser.h: interface for the CXTPMarkupParser class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #if !defined(__XTPMARKUPPARSER_H__)
  21. #define __XTPMARKUPPARSER_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #define XTP_MAX_TOKEN_SIZE 1024
  26. #define XTP_MAX_NAME_SIZE 128
  27. class _XTP_EXT_CLASS CXTPMarkupParser
  28. {
  29. public:
  30. CXTPMarkupParser();
  31. virtual ~CXTPMarkupParser();
  32. public:
  33. enum TokenType
  34. {
  35. tokenError = -1,
  36. tokenEof = 0,
  37. tokenTagStart,
  38. tokenTagEnd,
  39. tokenAttribute,
  40. tokenWord,
  41. tokenSpace,
  42. tokenData,
  43. tokenCommentStart,
  44. tokenCommentEnd,
  45. tokenCDataStart,
  46. tokenCDataEnd,
  47. tokenPIStart,
  48. tokenPIEnd
  49. };
  50. void SetBuffer(LPCSTR lpszStart, LPCSTR lpszEnd);
  51. void SetBuffer(LPCWSTR lpszStart, LPCWSTR lpszEnd);
  52. public:
  53. TokenType GetNextToken();
  54. const WCHAR* GetValue();
  55. const WCHAR* GetAttributeName();
  56. const WCHAR* GetTagName();
  57. // should be overrided to resolve entities, e.g.  
  58. virtual WCHAR ResolveEntity(const WCHAR* buf, int buf_size);
  59. int GetLine() const;
  60. int GetPosition() const;
  61. BOOL FindFirstTag();
  62. void SetEncoding(int nEncoding);
  63. private:
  64. typedef TokenType (CXTPMarkupParser::*PFNSCANNEXTTOKEN)();
  65. PFNSCANNEXTTOKEN m_scan;
  66. // content 'readers'
  67. TokenType ScanBody();
  68. TokenType ScanHead();
  69. TokenType ScanComment();
  70. TokenType ScanCData();
  71. TokenType ScanPI();
  72. TokenType ScanTag();
  73. WCHAR SkipWhitespace();
  74. void PushBack(WCHAR c);
  75. WCHAR GetChar();
  76. WCHAR ScanEntity();
  77. BOOL IsWhitespace(WCHAR c) const;
  78. void AppendValue(WCHAR c);
  79. void AppendAttributeName(WCHAR c);
  80. void AppendTagName(WCHAR c);
  81. WCHAR GetNextChar();
  82. TokenType ReportError(LPCWSTR lpszError);
  83. private:
  84. TokenType  m_token;
  85. WCHAR m_lpszValue[XTP_MAX_TOKEN_SIZE];
  86. int m_nValueLength;
  87. WCHAR m_lpszTagName[XTP_MAX_NAME_SIZE];
  88. int m_nTagNameLength;
  89. WCHAR m_lpszAttributeName[XTP_MAX_NAME_SIZE];
  90. int m_nAttributeNameLength;
  91. WCHAR m_cInputChar;
  92. BOOL m_bGotTail;
  93. int m_nLine;
  94. int m_nPosition;
  95. private:
  96. BOOL m_bUnicode;
  97. int m_nEncoding;
  98. LPCSTR m_lpszEnd;
  99. LPCSTR m_lpszPos;
  100. };
  101. AFX_INLINE int CXTPMarkupParser::GetLine() const {
  102. return m_nLine;
  103. }
  104. AFX_INLINE int CXTPMarkupParser::GetPosition() const {
  105. return m_nPosition;
  106. }
  107. AFX_INLINE void CXTPMarkupParser::SetEncoding(int nEncoding) {
  108. m_nEncoding = nEncoding;
  109. }
  110. #endif // !defined(__XTPMARKUPPARSER_H__)