ccrystaltextbuffer.h

来自「用bcg库编写的java IDE 源码」· C头文件 代码 · 共 351 行

H
351
字号
////////////////////////////////////////////////////////////////////////////
//  File:       ccrystaltextbuffer.h
//  Version:    1.0.0.0
//  Created:    29-Dec-1998
//
//  Author:     Stcherbatchenko Andrei
//  E-mail:     windfall@gmx.de
//
//  Interface of the CCrystalTextBuffer class, a part of Crystal Edit -
//  syntax coloring text editor.
//
//  You are free to use or modify this code to the following restrictions:
//  - Acknowledge me somewhere in your about box, simple "Parts of code by.."
//  will be enough. If you can't (or don't want to), contact me personally.
//  - LEAVE THIS HEADER INTACT
////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////
//  19-Jul-99
//      Ferdinand Prantl:
//  +   FEATURE: see cpps ...
//
//  ... it's being edited very rapidly so sorry for non-commented
//        and maybe "ugly" code ...
////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_CCRYSTALTEXTBUFFER_H__AD7F2F49_6CB3_11D2_8C32_0080ADB86836__INCLUDED_)
#define AFX_CCRYSTALTEXTBUFFER_H__AD7F2F49_6CB3_11D2_8C32_0080ADB86836__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "ccrystaltextview.h"

#ifndef __AFXTEMPL_H__
#pragma message("Include <afxtempl.h> in your stdafx.h to avoid this message")
#include <afxtempl.h>
#endif

#define UNDO_DESCRIP_BUF        32

enum LINEFLAGS
{
  LF_BOOKMARK_FIRST = 0x00000001L,
  LF_EXECUTION = 0x00010000L,
  LF_BREAKPOINT = 0x00020000L,
  LF_COMPILATION_ERROR = 0x00040000L,
  LF_BOOKMARKS = 0x00080000L,
  LF_INVALID_BREAKPOINT = 0x00100000L
};

#define LF_BOOKMARK(id)     (LF_BOOKMARK_FIRST << id)

enum CRLFSTYLE
{
  CRLF_STYLE_AUTOMATIC = -1,
  CRLF_STYLE_DOS = 0,
  CRLF_STYLE_UNIX = 1,
  CRLF_STYLE_MAC = 2
};

enum
{
  CE_ACTION_UNKNOWN = 0,
  CE_ACTION_PASTE = 1,
  CE_ACTION_DELSEL = 2,
  CE_ACTION_CUT = 3,
  CE_ACTION_TYPING = 4,
  CE_ACTION_BACKSPACE = 5,
  CE_ACTION_INDENT = 6,
  CE_ACTION_DRAGDROP = 7,
  CE_ACTION_REPLACE = 8,
  CE_ACTION_DELETE = 9,
  CE_ACTION_AUTOINDENT = 10,
  CE_ACTION_AUTOCOMPLETE = 11,
  CE_ACTION_AUTOEXPAND = 12,
  CE_ACTION_LOWERCASE = 13,
  CE_ACTION_UPPERCASE = 14,
  CE_ACTION_SWAPCASE = 15,
  CE_ACTION_CAPITALIZE = 16,
  CE_ACTION_SENTENCIZE = 17,
  CE_ACTION_RECODE  = 18, 
  CE_ACTION_SPELL = 19
                         //  ...
                         //  Expandable: user actions allowed
};


/////////////////////////////////////////////////////////////////////////////
// CUpdateContext class

class EDITPADC_CLASS CUpdateContext
{
public :
    virtual void RecalcPoint (CPoint & ptPoint) = 0;
};

#include <list>
#include <algorithm>
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// CCrystalTextBuffer command target
#include "listarray.h"



class EDITPADC_CLASS CCrystalTextBuffer : public CCmdTarget
{
public:
    DECLARE_DYNCREATE (CCrystalTextBuffer)

    int m_nSourceEncoding;
    static int m_nDefaultEncoding;
	    BOOL m_bInit;

protected:
    BOOL m_bReadOnly;
    BOOL m_bModified;
    int m_nCRLFMode;
    BOOL m_bCreateBackupFile;
    int m_nUndoBufSize;
    int FindLineWithFlag (DWORD dwFlag);
protected :
    #pragma pack(push,1)
    //  Nested class declarations
public:
    struct SLineInfo
	{
      TCHAR                           *m_pcLine;
      int m_nLength,                  m_nMax;
      DWORD                           m_dwFlags;
		
      SLineInfo()
      {
        memset(this, 0, sizeof (SLineInfo));
      }

	  /*
	  void operator=(SLineInfo& i)
	  {
        m_pcLine  = new TCHAR[i.m_nLength];
		strcpy(m_pcLine,i.m_pcLine);

		m_nLength = i.m_nLength;
		m_nMax    = i.m_nMax;
		m_dwFlags = i.m_dwFlags;
	  }
	  */
	};
	virtual SLineInfo* __newline()
	{
       return new SLineInfo;
	}

    enum
    {
      UNDO_INSERT     = 0x0001,
      UNDO_BEGINGROUP = 0x0100
    }urFlags;

    //  [JRT] Support For Descriptions On Undo/Redo Actions
    struct SUndoRecord
	{
        DWORD m_dwFlags;

        CPoint m_ptStartPos, m_ptEndPos;  //  Block of text participating

        int m_nAction;            //  For information only: action type

        private :
        //  TCHAR   *m_pcText;
        //  Since in most cases we have 1 character here,
        //  we should invent a better way. Note: 2 * sizeof(WORD) <= sizeof(TCHAR*)
        //
        //  Here we will use the following trick: on Win32 platforms high-order word
        //  of any pointer will be != 0. So we can store 1 character strings without
        //  allocating memory.
        //

        union
		{
           TCHAR *m_pszText;     //  For cases when we have > 1 character strings
           TCHAR m_szText[2];    //  For single-character strings
		};

        public :
        //  constructor/destructor for this struct
        SUndoRecord()
        {
          memset (this, 0, sizeof (SUndoRecord));
        };

        void SetText (LPCTSTR pszText);
        void FreeText ();

        LPCTSTR GetText () const
        {
          if (HIWORD ((DWORD) m_pszText) != 0)
            return m_pszText;
          return m_szText;
        };
      };

     #pragma pack(pop)

     class EDITPADC_CLASS CInsertContext : public CUpdateContext
	 {
        public:
             CPoint m_ptStart, m_ptEnd;
             virtual void RecalcPoint (CPoint & ptPoint);
	 };

     class EDITPADC_CLASS CDeleteContext : public CUpdateContext
     {
        public:
            CPoint m_ptStart, m_ptEnd;
            virtual void RecalcPoint (CPoint & ptPoint);
	 };

    //  Lines of text
    CArray<SLineInfo*,SLineInfo*>m_aLines;

    //  Undo
    CArray < SUndoRecord, SUndoRecord & >m_aUndoBuf;
    int m_nUndoPosition;
    int m_nSyncPosition;
    BOOL m_bUndoGroup, m_bUndoBeginGroup;

	//BEGIN SW
	/** Position where the last change was made. */
	CPoint m_ptLastChange;
	//END SW

    //  Connected views
    CList<CCrystalTextView*,CCrystalTextView*>m_lpViews;

    //  Helper methods
    void InsertLine (LPCTSTR pszLine, int nLength = -1, int nPosition = -1);
	virtual void AddLine(char*);
    virtual void AppendLine (int nLineIndex, LPCTSTR pszChars, int nLength = -1);

    //  Implementation
    BOOL InternalInsertText(CCrystalTextView * pSource, int nLine, int nPos, LPCTSTR pszText, int &nEndLine, int &nEndChar);
    BOOL InternalDeleteText(CCrystalTextView * pSource, int nStartLine, int nStartPos, int nEndLine, int nEndPos);


    virtual BOOL InternalInsertTextExt(CCrystalTextView * pSource, int nLine, int nPos, LPCTSTR pszText, int &nEndLine, int &nEndChar);
    virtual BOOL InternalDeleteTextExt(CCrystalTextView * pSource, int nStartLine, int nStartPos, int nEndLine, int nEndPos);


    //  [JRT] Support For Descriptions On Undo/Redo Actions
    void AddUndoRecord (BOOL bInsert, const CPoint & ptStartPos, const CPoint & ptEndPos,
                        LPCTSTR pszText, int nActionType = CE_ACTION_UNKNOWN);

    //  Overridable: provide action description
    virtual BOOL GetActionDescription (int nAction, CString & desc);


    // Operations
public :
    //  Construction/destruction code
    CCrystalTextBuffer ();
    ~CCrystalTextBuffer ();

    //  Basic functions
    BOOL InitNew (int nCrlfStyle = CRLF_STYLE_DOS);
    BOOL LoadFromFile (LPCTSTR pszFileName, int nCrlfStyle = CRLF_STYLE_AUTOMATIC);
    BOOL SaveToFile (LPCTSTR pszFileName, int nCrlfStyle = CRLF_STYLE_AUTOMATIC, BOOL bClearModifiedFlag = TRUE);
    void FreeAll ();

    //  'Dirty' flag
    virtual void SetModified (BOOL bModified = TRUE);
    BOOL IsModified () const;

    //  Connect/disconnect views
    void AddView (CCrystalTextView * pView);
    void RemoveView (CCrystalTextView * pView);
    
	//  Text access functions
    int GetLineCount ();
    virtual int GetLineLength (int nLine);
    virtual LPTSTR GetLineChars (int nLine);

    virtual DWORD GetLineFlags (int nLine);
    virtual int   GetLineWithFlag (DWORD dwFlag);
    virtual void  SetLineFlag (int nLine, DWORD dwFlag, BOOL bSet, BOOL bRemoveFromPreviousLine = TRUE);
    virtual void  GetText (int nStartLine, int nStartChar, int nEndLine, int nEndChar, CString & text, LPCTSTR pszCRLF = NULL);

    //  Attributes
    int GetCRLFMode ();
    void SetCRLFMode (int nCRLFMode);
    BOOL GetReadOnly () const;
    void SetReadOnly (BOOL bReadOnly = TRUE);

    //  Text modification functions
    BOOL InsertText(CCrystalTextView * pSource, int nLine, int nPos, LPCTSTR pszText, int &nEndLine, int &nEndChar, int nAction = CE_ACTION_UNKNOWN);
    BOOL DeleteText(CCrystalTextView * pSource, int nStartLine, int nStartPos, int nEndLine, int nEndPos, int nAction = CE_ACTION_UNKNOWN);

    virtual BOOL InsertTextExt(CCrystalTextView * pSource, int nLine, int nPos, LPCTSTR pszText, int &nEndLine, int &nEndChar, int nAction = CE_ACTION_UNKNOWN);
    virtual BOOL DeleteTextExt(CCrystalTextView * pSource, int nStartLine, int nStartPos, int nEndLine, int nEndPos, int nAction = CE_ACTION_UNKNOWN);


    //  Undo/Redo
    BOOL CanUndo ();
    BOOL CanRedo ();
    BOOL Undo (CPoint & ptCursorPos);
    BOOL Redo (CPoint & ptCursorPos);

    //  Undo grouping
    void BeginUndoGroup (BOOL bMergeWithPrevious = FALSE);
    void FlushUndoGroup (CCrystalTextView * pSource);

	//BEGIN SW
	/**
	Returns the position where the last changes where made.
	*/
	CPoint GetLastChangePos() const;
	//END SW

    //  Browse undo sequence
    POSITION GetUndoDescription (CString & desc, POSITION pos = NULL);
    POSITION GetRedoDescription (CString & desc, POSITION pos = NULL);

    //  Notify all connected views about changes in name of file
    CCrystalTextView::TextDefinition *RetypeViews (LPCTSTR lpszFileName);
    //  Notify all connected views about changes in text
    void UpdateViews (CCrystalTextView * pSource, CUpdateContext * pContext,
                      DWORD dwUpdateFlags, int nLineIndex = -1);

    // More bookmarks
    int FindNextBookmarkLine (int nCurrentLine = 0);
    int FindPrevBookmarkLine (int nCurrentLine = 0);

    BOOL IsMBSLead (int nLine, int nCol);
    BOOL IsMBSTrail (int nLine, int nCol);

    // Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CCrystalTextBuffer)
    //}}AFX_VIRTUAL

    // Implementation
protected :
    // Generated message map functions
    //{{AFX_MSG(CCrystalTextBuffer)
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP ()
};
#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?