⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textview.cpp.txt

📁 minidatabase一个小型的数据库管理系统。有创建数据库
💻 TXT
字号:
// TextView.cpp : implementation file    
//    
   
#include "stdafx.h"    
#include "MiniDatabaseDoc.h"    
#include "TextView.h"    
   
#ifdef _DEBUG    
#define new DEBUG_NEW    
#undef THIS_FILE    
static char THIS_FILE[] = __FILE__;   
#endif    
   
/////////////////////////////////////////////////////////////////////////////    
// CTextView    
   
IMPLEMENT_DYNCREATE(CTextView, CCrystalEditView)   
   
CTextView::CTextView()   
{   
}   
   
CTextView::~CTextView()   
{   
}   
   
BOOL CTextView::PreCreateWindow(CREATESTRUCT& cs)   
{   
    // TODO: Modify the Window class or styles here by modifying    
    //  the CREATESTRUCT cs    
   
    return CCrystalEditView::PreCreateWindow(cs);   
}   
   
   
BEGIN_MESSAGE_MAP(CTextView, CCrystalEditView)   
    //{{AFX_MSG_MAP(CTextView)    
    ON_WM_CONTEXTMENU()   
    //}}AFX_MSG_MAP    
END_MESSAGE_MAP()   
   
/////////////////////////////////////////////////////////////////////////////    
// CTextView diagnostics    
   
#ifdef _DEBUG    
void CTextView::AssertValid() const   
{   
    CCrystalEditView::AssertValid();   
}   
   
void CTextView::Dump(CDumpContext& dc) const   
{   
    CCrystalEditView::Dump(dc);   
}   
   
CMiniDatabaseDoc* CTextView::GetDocument() // non-debug version is inline    
{   
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMiniDatabaseDoc)));   
    return (CMiniDatabaseDoc*)m_pDocument;   
}   
#endif //_DEBUG    
   
/////////////////////////////////////////////////////////////////////////////    
// CTextView message handlers    
   
CCrystalTextBuffer *CTextView::LocateTextBuffer()   
{   
    return &GetDocument()->m_xTextBuffer;   
}   
   
void CTextView::OnInitialUpdate()    
{   
    CCrystalEditView::OnInitialUpdate();   
   
    SetFont(GetDocument()->m_lfText);   
}   
   
void CTextView::OnContextMenu(CWnd* pWnd, CPoint point)    
{   
    AfxMessageBox("Build your own context menu!");   
}   
   
// 处理关键字显示    
static LPTSTR s_szKeywordList[] =   
{   
    _T("TABLE"),   
    _T("CHAR"),   
    _T("SHORT"),   
    _T("INT"),   
    _T("ENUM"),   
    _T("UNSIGNED"),   
    _T("DEFAULT"),   
    _T("NOT"),   
    _T("NULL"),   
    _T("MIN-VALUE"),   
    _T("MAX-VALUE"),   
    _T("MAX-ROWS"),   
    _T("INSERT"),   
    _T("INTO"),   
    _T("VALUES"),   
    NULL   
};   
   
static BOOL IsMyKeyword(LPCTSTR pszChars, int nLength)   
{   
    for (int L = 0; s_szKeywordList[L] != NULL; L ++)   
    {   
        if (_strnicmp(s_szKeywordList[L], pszChars, nLength) == 0   
                && s_szKeywordList[L][nLength] == 0)   
            return TRUE;   
    }   
    return FALSE;   
}   
   
static BOOL IsMyNumber(LPCTSTR pszChars, int nLength)   
{   
    if (nLength > 2 && pszChars[0] == '0' && pszChars[1] == 'x')   
    {   
        for (int I = 2; I < nLength; I++)   
        {   
            if (isdigit(pszChars[I]) || (pszChars[I] >= 'A' && pszChars[I] <= 'F') ||   
                                        (pszChars[I] >= 'a' && pszChars[I] <= 'f'))   
                continue;   
            return FALSE;   
        }   
        return TRUE;   
    }   
    if (! isdigit(pszChars[0]))   
        return FALSE;   
    for (int I = 1; I < nLength; I++)   
    {   
        if (! isdigit(pszChars[I]) && pszChars[I] != '+' &&   
            pszChars[I] != '-' && pszChars[I] != '.' && pszChars[I] != 'e' &&   
            pszChars[I] != 'E')   
            return FALSE;   
    }   
    return TRUE;   
}   
   
#define DEFINE_BLOCK(pos, colorindex)   \    
    ASSERT((pos) >= 0 && (pos) <= nLength);\   
    if (pBuf != NULL)\   
    {\   
        if (nActualItems == 0 || pBuf[nActualItems - 1].m_nCharPos <= (pos)){\   
        pBuf[nActualItems].m_nCharPos = (pos);\   
        pBuf[nActualItems].m_nColorIndex = (colorindex);\   
        nActualItems ++;}\   
    }   
   
#define COOKIE_COMMENT          0x0001    
#define COOKIE_PREPROCESSOR     0x0002    
#define COOKIE_EXT_COMMENT      0x0004    
#define COOKIE_STRING           0x0008    
#define COOKIE_CHAR             0x0010    
   
DWORD CTextView::ParseLine(DWORD dwCookie, int nLineIndex, TEXTBLOCK *pBuf, int &nActualItems)   
{   
    int nLength = GetLineLength(nLineIndex);   
    if (nLength <= 0)   
        return dwCookie & COOKIE_EXT_COMMENT;   
   
    LPCTSTR pszChars    = GetLineChars(nLineIndex);   
    BOOL bFirstChar     = (dwCookie & ~COOKIE_EXT_COMMENT) == 0;   
    BOOL bRedefineBlock = TRUE;   
    BOOL bDecIndex  = FALSE;   
    int nIdentBegin = -1;   
    for (int I = 0; ; I++)   
    {   
        if (bRedefineBlock)   
        {   
            int nPos = I;   
            if (bDecIndex)   
                nPos--;   
            if (dwCookie & (COOKIE_COMMENT | COOKIE_EXT_COMMENT))   
            {   
                DEFINE_BLOCK(nPos, COLORINDEX_COMMENT);   
            }   
            else   
            if (dwCookie & (COOKIE_CHAR | COOKIE_STRING))   
            {   
                DEFINE_BLOCK(nPos, COLORINDEX_STRING);   
            }   
            else   
            if (dwCookie & COOKIE_PREPROCESSOR)   
            {   
                DEFINE_BLOCK(nPos, COLORINDEX_PREPROCESSOR);   
            }   
            else   
            {   
                DEFINE_BLOCK(nPos, COLORINDEX_NORMALTEXT);   
            }   
            bRedefineBlock = FALSE;   
            bDecIndex      = FALSE;   
        }   
   
        if (I == nLength)   
            break;   
   
        if (dwCookie & COOKIE_COMMENT)   
        {   
            DEFINE_BLOCK(I, COLORINDEX_COMMENT);   
            dwCookie |= COOKIE_COMMENT;   
            break;   
        }   
   
        //  String constant "...."    
        if (dwCookie & COOKIE_STRING)   
        {   
            if (pszChars[I] == '"' && (I == 0 || pszChars[I - 1] != '\\'))   
            {   
                dwCookie &= ~COOKIE_STRING;   
                bRedefineBlock = TRUE;   
            }   
            continue;   
        }   
   
        //  Char constant '..'    
        if (dwCookie & COOKIE_CHAR)   
        {   
            if (pszChars[I] == '\'' && (I == 0 || pszChars[I - 1] != '\\'))   
            {   
                dwCookie &= ~COOKIE_CHAR;   
                bRedefineBlock = TRUE;   
            }   
            continue;   
        }   
   
        //  Extended comment /*....*/    
        if (dwCookie & COOKIE_EXT_COMMENT)   
        {   
            if (I > 0 && pszChars[I] == '/' && pszChars[I - 1] == '*')   
            {   
                dwCookie &= ~COOKIE_EXT_COMMENT;   
                bRedefineBlock = TRUE;   
            }   
            continue;   
        }   
   
        if (I > 0 && pszChars[I] == '/' && pszChars[I - 1] == '/')   
        {   
            DEFINE_BLOCK(I - 1, COLORINDEX_COMMENT);   
            dwCookie |= COOKIE_COMMENT;   
            break;   
        }   
   
        //  Preprocessor directive #....    
        if (dwCookie & COOKIE_PREPROCESSOR)   
        {   
            if (I > 0 && pszChars[I] == '*' && pszChars[I - 1] == '/')   
            {   
                DEFINE_BLOCK(I - 1, COLORINDEX_COMMENT);   
                dwCookie |= COOKIE_EXT_COMMENT;   
            }   
            continue;   
        }   
   
        //  Normal text    
        if (pszChars[I] == '"')   
        {   
            DEFINE_BLOCK(I, COLORINDEX_STRING);   
            dwCookie |= COOKIE_STRING;   
            continue;   
        }   
        if (pszChars[I] == '\'')   
        {   
            DEFINE_BLOCK(I, COLORINDEX_STRING);   
            dwCookie |= COOKIE_CHAR;   
            continue;   
        }   
        if (I > 0 && pszChars[I] == '*' && pszChars[I - 1] == '/')   
        {   
            DEFINE_BLOCK(I - 1, COLORINDEX_COMMENT);   
            dwCookie |= COOKIE_EXT_COMMENT;   
            continue;   
        }   
   
        if (bFirstChar)   
        {   
            if (pszChars[I] == '#')   
            {   
                DEFINE_BLOCK(I, COLORINDEX_PREPROCESSOR);   
                dwCookie |= COOKIE_PREPROCESSOR;   
                continue;   
            }   
            if (! my_isspace(pszChars[I]))   
                bFirstChar = FALSE;   
        }   
   
        if (pBuf == NULL)   
            continue;   //  We don't need to extract keywords,    
                        //  for faster parsing skip the rest of loop    
   
        if (isalnum(pszChars[I]) || pszChars[I] == '_' || pszChars[I] == '.')   
        {   
            if (nIdentBegin == -1)   
                nIdentBegin = I;   
        }   
        else   
        {   
            if (nIdentBegin >= 0)   
            {   
                if (IsMyKeyword(pszChars + nIdentBegin, I - nIdentBegin))   
                {   
                    DEFINE_BLOCK(nIdentBegin, COLORINDEX_KEYWORD);   
                }   
                else   
                if (IsMyNumber(pszChars + nIdentBegin, I - nIdentBegin))   
                {   
                    DEFINE_BLOCK(nIdentBegin, COLORINDEX_NUMBER);   
                }   
                bRedefineBlock = TRUE;   
                bDecIndex = TRUE;   
                nIdentBegin = -1;   
            }   
        }   
    }   
   
    if (nIdentBegin >= 0)   
    {   
        if (IsMyKeyword(pszChars + nIdentBegin, I - nIdentBegin))   
        {   
            DEFINE_BLOCK(nIdentBegin, COLORINDEX_KEYWORD);   
        }   
        else   
        if (IsMyNumber(pszChars + nIdentBegin, I - nIdentBegin))   
        {   
            DEFINE_BLOCK(nIdentBegin, COLORINDEX_NUMBER);   
        }   
    }   
   
    if (pszChars[nLength - 1] != '\\')   
        dwCookie &= COOKIE_EXT_COMMENT;   
    return dwCookie;   
}   

⌨️ 快捷键说明

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