Markup.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:4k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // Markup.h: interface for the CMarkup class.
  2. //
  3. // Markup Release 6.1 Lite
  4. // Copyright (C) 1999-2001 First Objective Software, Inc. All rights reserved
  5. // This entire notice must be retained in this source code
  6. // Redistributing this source code requires written permission
  7. // This software is provided "as is", with no warranty.
  8. // Latest fixes enhancements and documentation at www.firstobject.com
  9. #if !defined(AFX_MARKUP_H__948A2705_9E68_11D2_A0BF_00105A27C570__INCLUDED_)
  10. #define AFX_MARKUP_H__948A2705_9E68_11D2_A0BF_00105A27C570__INCLUDED_
  11. #if _MSC_VER > 1000
  12. #pragma once
  13. #endif // _MSC_VER > 1000
  14. #include <afxtempl.h>
  15. /***
  16. XML解析类
  17. */
  18. class CMarkup  
  19. {
  20. public:
  21. CMarkup() { SetDoc( NULL ); };
  22. CMarkup( LPCTSTR szDoc ) { SetDoc( szDoc ); };
  23. CMarkup( const CMarkup& markup ) { *this = markup; };
  24. void operator=( const CMarkup& markup );
  25. virtual ~CMarkup() {};
  26. // Navigate
  27. bool SetDoc( LPCTSTR szDoc );
  28. bool IsWellFormed();
  29. bool FindElem( LPCTSTR szName=NULL );
  30. bool FindChildElem( LPCTSTR szName=NULL );
  31. bool IntoElem();
  32. bool OutOfElem();
  33. void ResetChildPos() { m_iPosChild = 0; };
  34. void ResetPos();
  35. CString GetTagName() const { return x_GetTagName(m_iPos); };
  36. CString GetChildTagName() const { return x_GetTagName(m_iPosChild); };
  37. CString GetData() const { return x_GetData(m_iPos); };
  38. CString GetChildData() const { return x_GetData(m_iPosChild); };
  39. CString GetAttrib( LPCTSTR szAttrib ) const { return x_GetAttrib(m_iPos,szAttrib); };
  40. CString GetChildAttrib( LPCTSTR szAttrib ) const { return x_GetAttrib(m_iPosChild,szAttrib); };
  41. bool GetOffsets( int& nStart, int& nEnd ) const;
  42. CString GetError() const { return m_csError; };
  43. // Create
  44. CString GetDoc() const { return m_csDoc; };
  45. bool AddElem( LPCTSTR szName, LPCTSTR szData=NULL );
  46. bool AddChildElem( LPCTSTR szName, LPCTSTR szData=NULL );
  47. bool AddAttrib( LPCTSTR szAttrib, LPCTSTR szValue );
  48. bool AddChildAttrib( LPCTSTR szAttrib, LPCTSTR szValue );
  49. protected:
  50. CString m_csDoc;
  51. int m_nLevel;
  52. CString m_csError;
  53. struct ElemPos
  54. {
  55. ElemPos() { Clear(); };
  56. ElemPos( const ElemPos& pos ) { *this = pos; };
  57. bool IsEmptyElement() const { return (nStartR == nEndL + 1); };
  58. void Clear()
  59. {
  60. nStartL=0; nStartR=0; nEndL=0; nEndR=0; nNext=0;
  61. iElemParent=0; iElemChild=0; iElemNext=0;
  62. };
  63. int nStartL;
  64. int nStartR;
  65. int nEndL;
  66. int nEndR;
  67. int nNext;
  68. int iElemParent;
  69. int iElemChild;
  70. int iElemNext;
  71. };
  72. CArray< ElemPos, ElemPos& > m_aPos;
  73. int m_iPos;
  74. int m_iPosChild;
  75. int m_iPosFree;
  76. int x_GetFreePos();
  77. int x_ReleasePos();
  78. struct TokenPos
  79. {
  80. TokenPos() { Clear(); };
  81. bool IsValid() const { return (nL <= nR); };
  82. void Clear() { nL=0; nR=-1; bIsString=false; };
  83. int nL;
  84. int nR;
  85. int nNext;
  86. bool bIsString;
  87. };
  88. int x_ParseElem( int iPos );
  89. int x_ParseError( LPCTSTR szError, LPCTSTR szTag = NULL );
  90. bool x_FindChar( int&n, _TCHAR c ) const;
  91. bool x_FindToken( TokenPos& token ) const;
  92. CString x_GetToken( const TokenPos& token ) const;
  93. CString x_GetTagName( int iPos ) const;
  94. CString x_GetData( int iPos ) const;
  95. CString x_GetAttrib( int iPos, LPCTSTR szAttrib ) const;
  96. int x_Add( int iPosParent, int iPosBefore, LPCTSTR szName, LPCTSTR szValue );
  97. bool x_FindAttrib( TokenPos& token, LPCTSTR szAttrib=NULL ) const;
  98. int x_AddAttrib( int iPos, LPCTSTR szAttrib, LPCTSTR szValue );
  99. int x_SetAttrib( int iPos, LPCTSTR szAttrib, LPCTSTR szValue );
  100. bool x_SetData( int iPos, LPCTSTR szData, int nCDATA );
  101. void x_DocChange( int nLeft, int nReplace, const CString& csInsert );
  102. void x_PosInsert( int iPos, int nInsertLength );
  103. void x_Adjust( int iPos, int nShift );
  104. CString x_TextToDoc( LPCTSTR szText, bool bAttrib = false ) const;
  105. CString x_TextFromDoc( int nLeft, int nRight ) const;
  106. };
  107. #endif // !defined(AFX_MARKUP_H__948A2705_9E68_11D2_A0BF_00105A27C570__INCLUDED_)