Markup.h
上传用户:hawkcdm
上传日期:2013-02-10
资源大小:411k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

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. class CMarkup  
  16. {
  17. public:
  18. CMarkup() { SetDoc( NULL ); };
  19. CMarkup( LPCTSTR szDoc ) { SetDoc( szDoc ); };
  20. CMarkup( const CMarkup& markup ) { *this = markup; };
  21. void operator=( const CMarkup& markup );
  22. virtual ~CMarkup() {};
  23. // Navigate
  24. bool SetDoc( LPCTSTR szDoc );
  25. bool IsWellFormed();
  26. bool FindElem( LPCTSTR szName=NULL );
  27. bool FindChildElem( LPCTSTR szName=NULL );
  28. bool IntoElem();
  29. bool OutOfElem();
  30. void ResetChildPos() { m_iPosChild = 0; };
  31. void ResetPos();
  32. CString GetTagName() const { return x_GetTagName(m_iPos); };
  33. CString GetChildTagName() const { return x_GetTagName(m_iPosChild); };
  34. CString GetData() const { return x_GetData(m_iPos); };
  35. CString GetChildData() const { return x_GetData(m_iPosChild); };
  36. CString GetAttrib( LPCTSTR szAttrib ) const { return x_GetAttrib(m_iPos,szAttrib); };
  37. CString GetChildAttrib( LPCTSTR szAttrib ) const { return x_GetAttrib(m_iPosChild,szAttrib); };
  38. bool GetOffsets( int& nStart, int& nEnd ) const;
  39. CString GetError() const { return m_csError; };
  40. // Create
  41. CString GetDoc() const { return m_csDoc; };
  42. bool AddElem( LPCTSTR szName, LPCTSTR szData=NULL );
  43. bool AddChildElem( LPCTSTR szName, LPCTSTR szData=NULL );
  44. bool AddAttrib( LPCTSTR szAttrib, LPCTSTR szValue );
  45. bool AddChildAttrib( LPCTSTR szAttrib, LPCTSTR szValue );
  46. protected:
  47. CString m_csDoc;
  48. int m_nLevel;
  49. CString m_csError;
  50. struct ElemPos
  51. {
  52. ElemPos() { Clear(); };
  53. ElemPos( const ElemPos& pos ) { *this = pos; };
  54. bool IsEmptyElement() const { return (nStartR == nEndL + 1); };
  55. void Clear()
  56. {
  57. nStartL=0; nStartR=0; nEndL=0; nEndR=0; nNext=0;
  58. iElemParent=0; iElemChild=0; iElemNext=0;
  59. };
  60. int nStartL;
  61. int nStartR;
  62. int nEndL;
  63. int nEndR;
  64. int nNext;
  65. int iElemParent;
  66. int iElemChild;
  67. int iElemNext;
  68. };
  69. CArray< ElemPos, ElemPos& > m_aPos;
  70. int m_iPos;
  71. int m_iPosChild;
  72. int m_iPosFree;
  73. int x_GetFreePos();
  74. int x_ReleasePos();
  75. struct TokenPos
  76. {
  77. TokenPos() { Clear(); };
  78. bool IsValid() const { return (nL <= nR); };
  79. void Clear() { nL=0; nR=-1; bIsString=false; };
  80. int nL;
  81. int nR;
  82. int nNext;
  83. bool bIsString;
  84. };
  85. int x_ParseElem( int iPos );
  86. int x_ParseError( LPCTSTR szError, LPCTSTR szTag = NULL );
  87. bool x_FindChar( int&n, _TCHAR c ) const;
  88. bool x_FindToken( TokenPos& token ) const;
  89. CString x_GetToken( const TokenPos& token ) const;
  90. CString x_GetTagName( int iPos ) const;
  91. CString x_GetData( int iPos ) const;
  92. CString x_GetAttrib( int iPos, LPCTSTR szAttrib ) const;
  93. int x_Add( int iPosParent, int iPosBefore, LPCTSTR szName, LPCTSTR szValue );
  94. bool x_FindAttrib( TokenPos& token, LPCTSTR szAttrib=NULL ) const;
  95. int x_AddAttrib( int iPos, LPCTSTR szAttrib, LPCTSTR szValue );
  96. int x_SetAttrib( int iPos, LPCTSTR szAttrib, LPCTSTR szValue );
  97. bool x_SetData( int iPos, LPCTSTR szData, int nCDATA );
  98. void x_DocChange( int nLeft, int nReplace, const CString& csInsert );
  99. void x_PosInsert( int iPos, int nInsertLength );
  100. void x_Adjust( int iPos, int nShift );
  101. CString x_TextToDoc( LPCTSTR szText, bool bAttrib = false ) const;
  102. CString x_TextFromDoc( int nLeft, int nRight ) const;
  103. };
  104. #endif // !defined(AFX_MARKUP_H__948A2705_9E68_11D2_A0BF_00105A27C570__INCLUDED_)