TextParse.h
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
- //*******************************************************************************
- // COPYRIGHT NOTES
- // ---------------
- // You may use this source code, compile or redistribute it as part of your application
- // for free. You cannot redistribute it as a part of a software development
- // library without the agreement of the author. If the sources are
- // distributed along with the application, you should leave the original
- // copyright notes in the source code without any changes.
- // This code can be used WITHOUT ANY WARRANTIES at your own risk.
- //
- // For the latest updates to this code, check this site:
- // http://www.masmex.com
- // after Sept 2000
- //
- // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
- //*******************************************************************************
- #ifndef __LINEPARSE_H__
- #define __LINEPARSE_H__
- #define CPP_SPACE ' '
- #define CPP_TAB 't'
- #define CPP_NEWLINE 'n'
- #define CPP_CRLF _T("rn")
- #define CPP_WHITE_SPACE _T(" t")
- class CTRL_EXT_CLASS CTextParse
- {
- enum { MAX_BUF = 4096 };
- public:
- CTextParse();
- CTextParse(const CTextParse &tp);
- CTextParse(LPCTSTR pszLine);
- ~CTextParse();
- public:
- operator LPCTSTR() const;
- operator LPTSTR();
- const CTextParse& operator=(LPCTSTR lpsz);
- const CTextParse& operator=(const CTextParse &tp);
- LPCTSTR operator++(int);
- LPTSTR &operator++();
- LPCTSTR operator--(int);
- LPCTSTR &operator--();
- int GetMax();
- void Set(LPCTSTR p);
- void Reset();
- void SaveCurPos();
- void RestorePos();
- void SetAtCurrent(int c);
- void MoveForward();
- void MoveBack();
- void MoveForward(int nCount);
- void MoveBack(int nCount);
- BOOL IsVirtualFunc();
- BOOL IsPrivate();
- BOOL IsPublic();
- BOOL IsProtected();
- BOOL IsEnd();
- BOOL IsClass();
- BOOL IsStartBrace();
- BOOL IsEndBrace();
- BOOL IsAccessSpecifier();
- BOOL IsMsgMap();
- BOOL IsDeclareMacro();
- BOOL IsStartCommentBlock();
- BOOL IsEndCommentBlock();
- BOOL IsConstructor(LPCTSTR pszClassName);
- BOOL IsValidCPP(LPCTSTR pszText);
- BOOL CharAtStart(int c);
- BOOL CharAtStart(LPCTSTR strTok);
- BOOL CharAtCurrent(int c);
- BOOL CharAtCurrent(LPCTSTR strTok);
- BOOL StringAtStart(LPCTSTR str);
- BOOL StringAtCurrent(LPCTSTR str);
- BOOL CharExist(int c,BOOL bForward = TRUE);
- BOOL StringExist(LPCTSTR str);
- BOOL StringExistInString(LPCTSTR str);
- BOOL SkipWord(BOOL bForward = TRUE);
- BOOL SkipWhiteSpace(BOOL bForward = TRUE);
- BOOL CharExistFromCurPos(int c,BOOL bForward = TRUE);
- BOOL ValidCppCharExist(int c,BOOL bForward = TRUE);
- BOOL CharExist(LPCTSTR str);
- BOOL FindString(LPCTSTR str);
- BOOL FindChar(int c);
- BOOL MoveWhileWhiteSpace(BOOL bForward = TRUE);
- BOOL MoveUntilWhiteSpace(BOOL bForward = TRUE);
- BOOL MoveUntilChar(int c,BOOL bForward = TRUE);
- BOOL MoveUntilChar(LPCTSTR strTok,BOOL bForward = TRUE);
- BOOL MoveUntilString(LPCTSTR str,BOOL bForward = TRUE);
- BOOL MoveWhileChar(int c,BOOL bForward = TRUE);
- BOOL MoveWhileChar(LPCTSTR strTok,BOOL bForward = TRUE);
- void MoveToLastChar();
- LPCTSTR CopyUntilWhiteSpace();
- LPCTSTR CopyUntilChar(int c);
- LPCTSTR CopyUntilString(LPCTSTR pszText);
- LPCTSTR CopyUntilChar(LPCTSTR strTok);
- LPCTSTR CopyWhileChar(int c);
- LPCTSTR CopyWhileChar(LPCTSTR strTok);
- LPCTSTR CopyFuncUntilChar(LPCTSTR strTok);
- LPCTSTR CopyUntilEnd();
- LPCTSTR CopyWhileWhiteSpace();
- BOOL IsCommentBlock(LPCTSTR strStart,LPCTSTR strEnd);
- BOOL ExtractArgs(CString &sRet,CStringArray &asArgs);
- LPCTSTR ExtractDeclareMacro();
- LPCTSTR ExtractConstructor();
- LPCTSTR ExtractFuncName();
- LPCTSTR ExtractClassName();
- LPCTSTR ExtractBaseClassName();
- LPCTSTR ExtractHTMLText(bool bRemoveCRLF=false);
- LPCTSTR ExtractHTMLText(LPCTSTR pszUntil,bool bRemoveCRLF=false);
- LPCTSTR ExtractHTMLLink();
- LPCTSTR ExtractDefaultArgs();
- LPCTSTR CopyWholeWord();
- bool FindWholeWord(LPCTSTR pszText);
- int GetWordLen();
- int GetCurrentChar();
- bool SkipHTMLCommand(bool bSkipCRLF=true);
- void SkipHTMLCommands(bool bSkipCRLF=true);
- protected:
- BOOL IsToken(LPCTSTR strTok,LPCTSTR p);
- BOOL IsString(LPCTSTR str);
- private:
- LPCTSTR m_pLine;
- LPCTSTR m_pStartLine;
- LPCTSTR m_pSavePos;
- TCHAR m_szCopyBuf[MAX_BUF+1];
- TCHAR m_szBuffer[MAX_BUF+1];
- };
- inline void CTextParse::MoveForward()
- {
- m_pLine = _tcsinc(m_pLine);
- }
- inline void CTextParse::MoveBack()
- {
- m_pLine = _tcsdec(m_pStartLine,m_pLine);
- }
- inline void CTextParse::MoveForward(int nCount)
- {
- m_pLine = _tcsninc(m_pLine,nCount);
- }
- inline void CTextParse::MoveBack(int nCount)
- {
- int i=nCount;
- LPCTSTR p = m_pLine;
- while (p > m_pStartLine && i > 0)
- {
- p = _tcsdec(m_pLine,p);
- i--;
- }
- m_pLine = p;
- }
- inline CTextParse::operator LPCTSTR() const
- {
- return m_pStartLine;
- }
- inline CTextParse::operator LPTSTR()
- {
- Reset();
- return m_szBuffer;
- }
- // prefix
- inline LPCTSTR CTextParse::operator++(int)
- {
- MoveForward();
- return (LPCTSTR&)*m_pLine;
- }
- // postfix
- inline LPTSTR &CTextParse::operator++()
- {
- LPCTSTR p = m_pLine;
- MoveForward();
- return (LPTSTR&)*p;
- }
- inline LPCTSTR CTextParse::operator--(int)
- {
- MoveBack();
- return m_pLine;
- }
- inline LPCTSTR &CTextParse::operator--()
- {
- LPCTSTR p = m_pLine;
- MoveBack();
- return (LPCTSTR&)*p;
- }
- inline BOOL CTextParse::IsEnd()
- {
- return *m_pLine == ' ';
- }
- inline int CTextParse::GetMax()
- {
- return MAX_BUF;
- }
- inline int CTextParse::GetCurrentChar()
- {
- return *m_pLine;
- }
- inline void CTextParse::SetAtCurrent(int c)
- {
- int i = m_pLine-m_szBuffer;
- m_szBuffer[i] = c;
- }
- inline void CTextParse::Set(LPCTSTR p)
- {
- m_pStartLine = p;
- m_pLine = p;
- m_pSavePos = p;
- }
- inline void CTextParse::Reset()
- {
- m_pLine = m_pStartLine;
- }
- inline void CTextParse::SaveCurPos()
- {
- m_pSavePos = m_pLine;
- }
- inline void CTextParse::RestorePos()
- {
- m_pLine = m_pSavePos;
- }
- inline BOOL CTextParse::CharAtStart(int c)
- {
- return *m_pStartLine == c;
- }
- inline BOOL CTextParse::CharAtStart(LPCTSTR strTok)
- {
- return IsToken(strTok,m_pStartLine);
- }
- inline BOOL CTextParse::CharAtCurrent(int c)
- {
- return *m_pLine == c;
- }
- inline BOOL CTextParse::CharAtCurrent(LPCTSTR strTok)
- {
- return IsToken(strTok,m_pLine);
- }
- inline BOOL CTextParse::StringAtStart(LPCTSTR str)
- {
- return(_tcsncmp(m_pStartLine,str,_tcslen(str)) == 0);
- }
- inline BOOL CTextParse::StringAtCurrent(LPCTSTR str)
- {
- return(_tcsncmp(m_pLine,str,_tcslen(str)) == 0);
- }
- inline BOOL CTextParse::CharExist(int c,BOOL bForward)
- {
- return _tcschr(m_pStartLine,c) != NULL;
- }
- inline BOOL CTextParse::StringExist(LPCTSTR str)
- {
- return _tcsstr(m_pLine,str) != NULL;
- }
- inline BOOL CTextParse::StringExistInString(LPCTSTR str)
- {
- return _tcsstr(m_pStartLine,str) != NULL;
- }
- inline BOOL CTextParse::SkipWord(BOOL bForward)
- {
- return MoveUntilChar(CPP_WHITE_SPACE,bForward);
- }
- inline BOOL CTextParse::SkipWhiteSpace(BOOL bForward)
- {
- return MoveWhileChar(CPP_WHITE_SPACE,bForward);
- }
- inline BOOL CTextParse::IsString(LPCTSTR str)
- {
- return(_tcsncmp(m_pLine,str,_tcslen(str)) == 0);
- }
- inline LPCTSTR CTextParse::CopyUntilWhiteSpace()
- {
- return CopyUntilChar(CPP_WHITE_SPACE);
- }
- inline LPCTSTR CTextParse::CopyWhileWhiteSpace()
- {
- return CopyWhileChar(CPP_WHITE_SPACE);
- }
- inline BOOL CTextParse::MoveWhileWhiteSpace(BOOL bForward)
- {
- return MoveWhileChar(CPP_WHITE_SPACE,bForward);
- }
- inline BOOL CTextParse::MoveUntilWhiteSpace(BOOL bForward)
- {
- return MoveUntilChar(CPP_WHITE_SPACE,bForward);
- }
- // move to last char
- inline void CTextParse::MoveToLastChar()
- {
- LPCTSTR p = m_pLine;
- while (*p != ' ')
- p = _tcsinc(p);
- if (p != m_pLine)
- p = _tcsdec(m_pStartLine,p);
- m_pLine = p;
- }
- #endif