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

对话框与窗口

开发平台:

Visual C++

  1. // XTPSyntaxEditTextIterator.h
  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 SYNTAX EDIT 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. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPSYNTAXEDITTEXTITERATOR_H__)
  22. #define __XTPSYNTAXEDITTEXTITERATOR_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPSyntaxEditBufferManager;
  28. //===========================================================================
  29. // Summary:
  30. //      This class provides functionality to navigate text in the data
  31. //      buffer, seek forward/backward, retrieve text by lines, determine
  32. //      control symbols like CRLF.
  33. //      When you create instance of CXTPSyntaxEditTextIterator class you
  34. //      should provide pointer to data storage, represented by
  35. //      CXTPSyntaxEditTextIterator class.
  36. // See Also:
  37. //      CXTPSyntaxEditBufferManager.
  38. //===========================================================================
  39. class _XTP_EXT_CLASS CXTPSyntaxEditTextIterator : public CXTPCmdTarget
  40. {
  41. public:
  42. //-----------------------------------------------------------------------
  43. // Summary:
  44. //      Default object constructor.
  45. // Parameters:
  46. //      pData   : [in] pointer to the CXTPSyntaxEditBufferManager object.
  47. // See Also:
  48. //      CXTPSyntaxEditBufferManager.
  49. //-----------------------------------------------------------------------
  50. CXTPSyntaxEditTextIterator(CXTPSyntaxEditBufferManager* pData);
  51. //-----------------------------------------------------------------------
  52. // Summary:
  53. //      Destroys a CXTPSyntaxEditTextIterator object, handles cleanup
  54. //      and de-allocation.
  55. //-----------------------------------------------------------------------
  56. virtual ~CXTPSyntaxEditTextIterator(void);
  57. //-----------------------------------------------------------------------
  58. // Summary:
  59. //      Returns the CRLF of the current document.
  60. // Returns:
  61. //      CString object containing CRLF text.
  62. // Remarks:
  63. //      Call this member function to get current CRLF control symbol.
  64. //      Strings like "rn", "nr", "r" are recognized as CRLF
  65. //      control symbol.
  66. //-----------------------------------------------------------------------
  67. virtual CString GetEOL(); // "rn", "nr", "r"
  68. //-----------------------------------------------------------------------
  69. // Summary:
  70. //      Repositions the "current position pointer" in the internal data
  71. //      buffer to the begin.
  72. // Remarks:
  73. //      Call this member function to set the "current position pointer"
  74. //      in the internal data buffer to the begin. Besides it resets
  75. //      all others internal text counters.
  76. // See Also:
  77. //      SeekPos()
  78. //-----------------------------------------------------------------------
  79. virtual void SeekBegin();
  80. //-----------------------------------------------------------------------
  81. // Summary:
  82. //      Repositions the "current position pointer" in the internal data
  83. //      buffer to the specified position.
  84. // Parameters:
  85. //      posLC       : [in] Position in the text to set as current.
  86. //      hBreakEvent : [in] Handle to the break event to stop function execution.
  87. // Remarks:
  88. //      Call this member function to set the "current position pointer"
  89. //      in the internal data buffer to the specified position.
  90. //      For big texts this operation may take a lot of time. hBreakEvent
  91. //      is used to to stop function execution without reaching the specified position.
  92. // Returns:
  93. //      TRUE if successful< otherwise FALSE.
  94. // See Also:
  95. //      SeekBegin()
  96. //-----------------------------------------------------------------------
  97. virtual BOOL SeekPos(const XTP_EDIT_LINECOL& posLC, HANDLE hBreakEvent = NULL);
  98. //-----------------------------------------------------------------------
  99. // Summary:
  100. //      Returns text of required length.
  101. // Parameters:
  102. //      nCharsBuf : [in] length of the text in bytes to be returned.
  103. // Remarks:
  104. //      Call this member function to get text of required length.
  105. //      CRLF symbols are taken in account and don't remove from the
  106. //      returned string.
  107. // Returns:
  108. //      Pointer to the character string.
  109. //-----------------------------------------------------------------------
  110. virtual LPCTSTR GetText(int nCharsBuf = 512);  // don't remove line end chars
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //      Moves current position and return pointer to the text begin.
  114. // Parameters:
  115. //      dwChars     : [in] counts to move.
  116. //      nCharsBuf   : [in] length of the text in bytes to be returned.
  117. // Returns:
  118. //      Pointer to the character string.
  119. //-----------------------------------------------------------------------
  120. virtual LPCTSTR SeekNext(DWORD dwChars = 1, int nCharsBuf = 512);
  121. //-----------------------------------------------------------------------
  122. // Summary:
  123. //      Moves current position back for 1 character, and return pointer
  124. //      to the text begin.
  125. // Returns:
  126. //      Pointer to the character string or NULL if text begin is reached.
  127. //-----------------------------------------------------------------------
  128. virtual LPCTSTR SeekPrev();
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //      Determines if end of data is reached.
  132. // Returns:
  133. //      Nonzero if the data buffer  contains no records or if you have
  134. //      scrolled beyond the last position; otherwise 0
  135. // Remarks:
  136. //      Call this member function to determine if end of data is
  137. //      reached. You can also use IsEOF to determine whether the
  138. //      data buffer contains any data or is empty.
  139. //-----------------------------------------------------------------------
  140. virtual BOOL IsEOF();
  141. //-----------------------------------------------------------------------
  142. // Summary:
  143. //      Returns current position as XTP_EDIT_LINECOL structure.
  144. // Returns:
  145. //      XTP_EDIT_LINECOL structure with current position.
  146. // See Also:
  147. //      XTP_EDIT_LINECOL .
  148. //-----------------------------------------------------------------------
  149. virtual XTP_EDIT_LINECOL GetPosLC();
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //      Returns last text position as XTP_EDIT_LINECOL structure.
  153. // Returns:
  154. //      XTP_EDIT_LINECOL structure with current position.
  155. // See Also:
  156. //      XTP_EDIT_LINECOL .
  157. //-----------------------------------------------------------------------
  158. virtual XTP_EDIT_LINECOL GetPosLC_last(BOOL bWithEOL);
  159. //-----------------------------------------------------------------------
  160. // Summary:
  161. //      Decrement of position.
  162. // Parameters:
  163. //      rLC : [in] reference to position description structure.
  164. //-----------------------------------------------------------------------
  165. virtual void LCPosDec(XTP_EDIT_LINECOL& rLC);
  166. //-----------------------------------------------------------------------
  167. // Summary:
  168. //      Increment of position.
  169. // Parameters:
  170. //      rLC         : [in] reference to position description structure.
  171. //      nCharsAdd   : [in] Chars count to add.
  172. //-----------------------------------------------------------------------
  173. virtual void LCPosAdd(XTP_EDIT_LINECOL& rLC, int nCharsAdd);
  174. //-----------------------------------------------------------------------
  175. // Summary:
  176. //      Returns length of specified line.
  177. // Parameters:
  178. //      nLine       : [in] numeric line identifier.
  179. //      bWithEOL    : [in] boolean flag determines if end of line symbols
  180. //                        are taken into account.
  181. // Returns:
  182. //      Length of specified line.
  183. // Remarks:
  184. //      Call this member function to determine length of line. You
  185. //      can request to ignore end of line characters.
  186. //-----------------------------------------------------------------------
  187. virtual int GetLineLen(int nLine, BOOL bWithEOL = FALSE);
  188. //-----------------------------------------------------------------------
  189. // Summary:
  190. //      Returns length of specified line in bytes.
  191. // Parameters:
  192. //      nLine       : [in] numeric line identifier.
  193. //      bWithEOL    : [in] boolean flag determines if end of line symbols
  194. //                        are taken into account.
  195. // Returns:
  196. //      Length of specified line.
  197. // Remarks:
  198. //      Call this member function to determine length of line. You
  199. //      can request to ignore end of line characters.
  200. //-----------------------------------------------------------------------
  201. virtual int GetLineLenBytes(int nLine, BOOL bWithEOL);
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //      Sets new offset value.
  205. // Parameters:
  206. //      nOffsetChars : [in] new offset value.
  207. //-----------------------------------------------------------------------
  208. virtual void SetTxtOffset(int nOffsetChars);
  209. //-----------------------------------------------------------------------
  210. // Summary:
  211. //      Returns file name.
  212. // Returns:
  213. //      CString object containing file name.
  214. //-----------------------------------------------------------------------
  215. virtual CString GetFileExt();
  216. //-----------------------------------------------------------------------
  217. // Summary:
  218. //      Get maximum buffer size for back text offset.
  219. // Returns:
  220. //      Back buffer size (chars).
  221. // See Also:
  222. //      SetTxtOffset()
  223. //-----------------------------------------------------------------------
  224. virtual int GetMaxBackOffset() const;
  225. protected:
  226. CXTPSyntaxEditBufferManager* m_pData; // Pointer to used CXTPSyntaxEditBufferManager object
  227. XTP_EDIT_LINECOL   m_LCpos;    // current position in the text.
  228. BOOL m_bEOF;            // flag end of file.
  229. CMap<DWORD, DWORD, int, int> m_mapLine2Len; // store map of line - length of line
  230. //-----------------------------------------------------------------------
  231. // Summary:
  232. //      Get maximum buffer size for back text offset.
  233. // Parameters:
  234. //      nOffcetB : [in] offest in bytes.
  235. // Returns:
  236. //      Pointer to TCHAR buffer.
  237. //-----------------------------------------------------------------------
  238. TCHAR* GetBuffer(int nOffcetB);
  239. CArray<CHAR, CHAR>  m_arBuffer; // buffer of chars
  240. int                 m_nBufSizeB;    // buffer length
  241. int                 m_nNextLine;    // next line id
  242. int                 m_nBufOffsetB;  // offset
  243. int                 m_nBufOffsetB_normal;   // offset
  244. int                 m_nBufOffsetB_max;  // offset
  245. int                 m_nTmpOffsetC;  // offset
  246. int                 m_nTmpOffsetB;  // offset
  247. };
  248. ////////////////////////////////////////////////////////////////////////////
  249. AFX_INLINE TCHAR* CXTPSyntaxEditTextIterator::GetBuffer(int nOffcetB) {
  250. return (TCHAR*)((CHAR*)m_arBuffer.GetData() + nOffcetB);
  251. }
  252. AFX_INLINE int CXTPSyntaxEditTextIterator::GetMaxBackOffset() const {
  253. return m_nBufOffsetB_normal;
  254. }
  255. ////////////////////////////////////////////////////////////////////////////
  256. #endif // !defined(__XTPSYNTAXEDITTEXTITERATOR_H__)