You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
11 KiB
C++
292 lines
11 KiB
C++
// XTPSyntaxEditTextIterator.h
|
|
//
|
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME SYNTAX EDIT LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#if !defined(__XTPSYNTAXEDITTEXTITERATOR_H__)
|
|
#define __XTPSYNTAXEDITTEXTITERATOR_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
class CXTPSyntaxEditBufferManager;
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// This class provides functionality to navigate text in the data
|
|
// buffer, seek forward/backward, retrieve text by lines, determine
|
|
// control symbols like CRLF.
|
|
// When you create instance of CXTPSyntaxEditTextIterator class you
|
|
// should provide pointer to data storage, represented by
|
|
// CXTPSyntaxEditTextIterator class.
|
|
// See Also:
|
|
// CXTPSyntaxEditBufferManager.
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPSyntaxEditTextIterator : public CXTPCmdTarget
|
|
{
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Default object constructor.
|
|
// Parameters:
|
|
// pData : [in] pointer to the CXTPSyntaxEditBufferManager object.
|
|
// See Also:
|
|
// CXTPSyntaxEditBufferManager.
|
|
//-----------------------------------------------------------------------
|
|
CXTPSyntaxEditTextIterator(CXTPSyntaxEditBufferManager* pData);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPSyntaxEditTextIterator object, handles cleanup
|
|
// and de-allocation.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPSyntaxEditTextIterator(void);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns the CRLF of the current document.
|
|
// Returns:
|
|
// CString object containing CRLF text.
|
|
// Remarks:
|
|
// Call this member function to get current CRLF control symbol.
|
|
// Strings like "\r\n", "\n\r", "\r" are recognized as CRLF
|
|
// control symbol.
|
|
//-----------------------------------------------------------------------
|
|
virtual CString GetEOL() const; // "\r\n", "\n\r", "\r"
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Repositions the "current position pointer" in the internal data
|
|
// buffer to the begin.
|
|
// Remarks:
|
|
// Call this member function to set the "current position pointer"
|
|
// in the internal data buffer to the begin. Besides it resets
|
|
// all others internal text counters.
|
|
// See Also:
|
|
// SeekPos()
|
|
//-----------------------------------------------------------------------
|
|
virtual void SeekBegin();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Repositions the "current position pointer" in the internal data
|
|
// buffer to the specified position.
|
|
// Parameters:
|
|
// posLC : [in] Position in the text to set as current.
|
|
// hBreakEvent : [in] Handle to the break event to stop function execution.
|
|
// Remarks:
|
|
// Call this member function to set the "current position pointer"
|
|
// in the internal data buffer to the specified position.
|
|
// For big texts this operation may take a lot of time. hBreakEvent
|
|
// is used to to stop function execution without reaching the specified position.
|
|
// Returns:
|
|
// TRUE if successful, otherwise FALSE.
|
|
// See Also:
|
|
// SeekBegin()
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL SeekPos(const XTP_EDIT_LINECOL& posLC, HANDLE hBreakEvent = NULL);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns text of required length
|
|
// Parameters:
|
|
// nCharsBuf : [in] length of the text in bytes to be returned.
|
|
// Remarks:
|
|
// Call this member function to get text of required length.
|
|
// CRLF symbols are taken in account and don't remove from the
|
|
// returned string.
|
|
// Returns:
|
|
// Pointer to the character string.
|
|
//-----------------------------------------------------------------------
|
|
virtual LPCTSTR GetText(int nCharsBuf = 512);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Moves current position and return pointer to the text begin.
|
|
// Parameters:
|
|
// dwChars : [in] counts to move.
|
|
// nCharsBuf : [in] length of the text in bytes to be returned.
|
|
// Returns:
|
|
// Pointer to the character string.
|
|
//-----------------------------------------------------------------------
|
|
virtual LPCTSTR SeekNext(DWORD dwChars = 1, int nCharsBuf = 512);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Moves current position back for 1 character, and return pointer
|
|
// to the text begin.
|
|
// Returns:
|
|
// Pointer to the character string or NULL if text begin is reached.
|
|
//-----------------------------------------------------------------------
|
|
virtual LPCTSTR SeekPrev();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Determines if end of data is reached.
|
|
// Returns:
|
|
// Nonzero if the data buffer contains no records or if you have
|
|
// scrolled beyond the last position; otherwise 0
|
|
// Remarks:
|
|
// Call this member function to determine if end of data is
|
|
// reached. You can also use IsEOF to determine whether the
|
|
// data buffer contains any data or is empty.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL IsEOF() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns current position as XTP_EDIT_LINECOL structure.
|
|
// Returns:
|
|
// XTP_EDIT_LINECOL structure with current position.
|
|
// See Also:
|
|
// XTP_EDIT_LINECOL .
|
|
//-----------------------------------------------------------------------
|
|
virtual XTP_EDIT_LINECOL GetPosLC() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns last text position as XTP_EDIT_LINECOL structure.
|
|
// Parameters:
|
|
// bWithEOL : flag to include or nor EOL
|
|
// Returns:
|
|
// XTP_EDIT_LINECOL structure with current position.
|
|
// See Also:
|
|
// XTP_EDIT_LINECOL .
|
|
//-----------------------------------------------------------------------
|
|
virtual XTP_EDIT_LINECOL GetPosLC_last(BOOL bWithEOL) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Decrement of position.
|
|
// Parameters:
|
|
// rLC : [in] reference to position description structure.
|
|
//-----------------------------------------------------------------------
|
|
virtual void LCPosDec(XTP_EDIT_LINECOL& rLC) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Increment of position.
|
|
// Parameters:
|
|
// rLC : [in] reference to position description structure.
|
|
// nCharsAdd : [in] Chars count to add.
|
|
//-----------------------------------------------------------------------
|
|
virtual void LCPosAdd(XTP_EDIT_LINECOL& rLC, int nCharsAdd) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns length of specified line.
|
|
// Parameters:
|
|
// nLine : [in] numeric line identifier.
|
|
// bWithEOL : [in] boolean flag determines if end of line symbols
|
|
// are taken into account.
|
|
// Returns:
|
|
// Length of specified line.
|
|
// Remarks:
|
|
// Call this member function to determine length of line. You
|
|
// can request to ignore end of line characters.
|
|
//-----------------------------------------------------------------------
|
|
virtual int GetLineLen(int nLine, BOOL bWithEOL = FALSE) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns length of specified line in bytes.
|
|
// Parameters:
|
|
// nLine : [in] numeric line identifier.
|
|
// bWithEOL : [in] boolean flag determines if end of line symbols
|
|
// are taken into account.
|
|
// Returns:
|
|
// Length of specified line.
|
|
// Remarks:
|
|
// Call this member function to determine length of line. You
|
|
// can request to ignore end of line characters.
|
|
//-----------------------------------------------------------------------
|
|
virtual int GetLineLenBytes(int nLine, BOOL bWithEOL) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Sets new offset value.
|
|
// Parameters:
|
|
// nOffsetChars : [in] new offset value.
|
|
//-----------------------------------------------------------------------
|
|
virtual void SetTxtOffset(int nOffsetChars);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns file name.
|
|
// Returns:
|
|
// CString object containing file name.
|
|
//-----------------------------------------------------------------------
|
|
virtual CString GetFileExt() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Get maximum buffer size for back text offset.
|
|
// Returns:
|
|
// Back buffer size (chars).
|
|
// See Also:
|
|
// SetTxtOffset()
|
|
//-----------------------------------------------------------------------
|
|
virtual int GetMaxBackOffset() const;
|
|
|
|
protected:
|
|
CXTPSyntaxEditBufferManager* m_pData; // Pointer to used CXTPSyntaxEditBufferManager object
|
|
|
|
XTP_EDIT_LINECOL m_LCpos; // current position in the text.
|
|
BOOL m_bEOF; // flag end of file.
|
|
|
|
CMap<DWORD, DWORD, int, int> m_mapLine2Len; // store map of line - length of line
|
|
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Get maximum buffer size for back text offset.
|
|
// Parameters:
|
|
// nOffcetB : [in] offest in bytes.
|
|
// Returns:
|
|
// Pointer to TCHAR buffer.
|
|
//-----------------------------------------------------------------------
|
|
TCHAR* GetBuffer(int nOffcetB) const;
|
|
|
|
CArray<CHAR, CHAR> m_arBuffer; // buffer of chars
|
|
int m_nBufSizeB; // buffer length
|
|
int m_nNextLine; // next line id
|
|
|
|
int m_nBufOffsetB; // offset
|
|
|
|
int m_nBufOffsetB_normal; // offset
|
|
int m_nBufOffsetB_max; // offset
|
|
|
|
int m_nTmpOffsetC; // offset
|
|
int m_nTmpOffsetB; // offset
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
AFX_INLINE TCHAR* CXTPSyntaxEditTextIterator::GetBuffer(int nOffcetB) const {
|
|
return (TCHAR*)((CHAR*)m_arBuffer.GetData() + nOffcetB);
|
|
}
|
|
AFX_INLINE int CXTPSyntaxEditTextIterator::GetMaxBackOffset() const {
|
|
return m_nBufOffsetB_normal;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
#endif // !defined(__XTPSYNTAXEDITTEXTITERATOR_H__)
|