TextParse.h
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:8k
源码类别:

图形图象

开发平台:

Visual C++

  1. //*******************************************************************************
  2. // COPYRIGHT NOTES
  3. // ---------------
  4. // You may use this source code, compile or redistribute it as part of your application 
  5. // for free. You cannot redistribute it as a part of a software development 
  6. // library without the agreement of the author. If the sources are 
  7. // distributed along with the application, you should leave the original 
  8. // copyright notes in the source code without any changes.
  9. // This code can be used WITHOUT ANY WARRANTIES at your own risk.
  10. // 
  11. // For the latest updates to this code, check this site:
  12. // http://www.masmex.com 
  13. // after Sept 2000
  14. // 
  15. // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
  16. //*******************************************************************************
  17. #ifndef __LINEPARSE_H__
  18. #define __LINEPARSE_H__
  19. #define CPP_SPACE ' '
  20. #define CPP_TAB 't'
  21. #define CPP_NEWLINE 'n'
  22. #define CPP_CRLF _T("rn")
  23. #define CPP_WHITE_SPACE _T(" t")
  24. class CTRL_EXT_CLASS CTextParse 
  25. {
  26. enum { MAX_BUF = 4096 };
  27. public:
  28. CTextParse();
  29. CTextParse(const CTextParse &tp);
  30. CTextParse(LPCTSTR pszLine);
  31. ~CTextParse();
  32. public:
  33. operator LPCTSTR() const;
  34. operator LPTSTR();
  35. const CTextParse& operator=(LPCTSTR lpsz);
  36. const CTextParse& operator=(const CTextParse &tp);
  37. LPCTSTR operator++(int);
  38. LPTSTR &operator++();
  39. LPCTSTR operator--(int);
  40. LPCTSTR &operator--();
  41. int GetMax();
  42. void Set(LPCTSTR p);
  43. void Reset();
  44. void SaveCurPos();
  45. void RestorePos();
  46. void SetAtCurrent(int c);
  47. void MoveForward();
  48. void MoveBack();
  49. void MoveForward(int nCount);
  50. void MoveBack(int nCount);
  51. BOOL IsVirtualFunc();
  52. BOOL IsPrivate();
  53. BOOL IsPublic();
  54. BOOL IsProtected();
  55. BOOL IsEnd();
  56. BOOL IsClass();
  57. BOOL IsStartBrace();
  58. BOOL IsEndBrace();
  59. BOOL IsAccessSpecifier();
  60. BOOL IsMsgMap();
  61. BOOL IsDeclareMacro();
  62. BOOL IsStartCommentBlock();
  63. BOOL IsEndCommentBlock();
  64. BOOL IsConstructor(LPCTSTR pszClassName);
  65. BOOL IsValidCPP(LPCTSTR pszText);
  66. BOOL CharAtStart(int c);
  67. BOOL CharAtStart(LPCTSTR strTok);
  68. BOOL CharAtCurrent(int c);
  69. BOOL CharAtCurrent(LPCTSTR strTok);
  70. BOOL StringAtStart(LPCTSTR str);
  71. BOOL StringAtCurrent(LPCTSTR str);
  72. BOOL CharExist(int c,BOOL bForward = TRUE);
  73. BOOL StringExist(LPCTSTR str);
  74. BOOL StringExistInString(LPCTSTR str);
  75. BOOL SkipWord(BOOL bForward = TRUE);
  76. BOOL SkipWhiteSpace(BOOL bForward = TRUE);
  77. BOOL CharExistFromCurPos(int c,BOOL bForward = TRUE);
  78. BOOL ValidCppCharExist(int c,BOOL bForward = TRUE);
  79. BOOL CharExist(LPCTSTR str);
  80. BOOL FindString(LPCTSTR str);
  81. BOOL FindChar(int c);
  82. BOOL MoveWhileWhiteSpace(BOOL bForward = TRUE);
  83. BOOL MoveUntilWhiteSpace(BOOL bForward = TRUE);
  84. BOOL MoveUntilChar(int c,BOOL bForward = TRUE);
  85. BOOL MoveUntilChar(LPCTSTR strTok,BOOL bForward = TRUE);
  86. BOOL MoveUntilString(LPCTSTR str,BOOL bForward = TRUE);
  87. BOOL MoveWhileChar(int c,BOOL bForward = TRUE);
  88. BOOL MoveWhileChar(LPCTSTR strTok,BOOL bForward = TRUE);
  89. void MoveToLastChar();
  90. LPCTSTR CopyUntilWhiteSpace();
  91. LPCTSTR CopyUntilChar(int c);
  92. LPCTSTR CopyUntilString(LPCTSTR pszText);
  93. LPCTSTR CopyUntilChar(LPCTSTR strTok);
  94. LPCTSTR CopyWhileChar(int c);
  95. LPCTSTR CopyWhileChar(LPCTSTR strTok);
  96. LPCTSTR CopyFuncUntilChar(LPCTSTR strTok);
  97. LPCTSTR CopyUntilEnd();
  98. LPCTSTR CopyWhileWhiteSpace();
  99. BOOL IsCommentBlock(LPCTSTR strStart,LPCTSTR strEnd);
  100. BOOL ExtractArgs(CString &sRet,CStringArray &asArgs);
  101. LPCTSTR ExtractDeclareMacro();
  102. LPCTSTR ExtractConstructor();
  103. LPCTSTR ExtractFuncName();
  104. LPCTSTR ExtractClassName();
  105. LPCTSTR ExtractBaseClassName();
  106. LPCTSTR ExtractHTMLText(bool bRemoveCRLF=false);
  107. LPCTSTR ExtractHTMLText(LPCTSTR pszUntil,bool bRemoveCRLF=false);
  108. LPCTSTR ExtractHTMLLink();
  109. LPCTSTR ExtractDefaultArgs();
  110. LPCTSTR CopyWholeWord();
  111. bool FindWholeWord(LPCTSTR pszText);
  112. int GetWordLen();
  113. int GetCurrentChar();
  114. bool SkipHTMLCommand(bool bSkipCRLF=true);
  115. void SkipHTMLCommands(bool bSkipCRLF=true);
  116. protected:
  117. BOOL IsToken(LPCTSTR strTok,LPCTSTR p);
  118. BOOL IsString(LPCTSTR str);
  119. private:
  120. LPCTSTR m_pLine;
  121. LPCTSTR m_pStartLine;
  122. LPCTSTR m_pSavePos;
  123. TCHAR m_szCopyBuf[MAX_BUF+1];
  124. TCHAR m_szBuffer[MAX_BUF+1];
  125. };
  126. inline void CTextParse::MoveForward()
  127. {
  128. m_pLine = _tcsinc(m_pLine);
  129. }
  130. inline void CTextParse::MoveBack()
  131. {
  132. m_pLine = _tcsdec(m_pStartLine,m_pLine);
  133. }
  134. inline void CTextParse::MoveForward(int nCount)
  135. {
  136. m_pLine = _tcsninc(m_pLine,nCount);
  137. }
  138. inline void CTextParse::MoveBack(int nCount)
  139. {
  140. int i=nCount;
  141. LPCTSTR p = m_pLine;
  142. while (p > m_pStartLine && i > 0)
  143. {
  144.    p = _tcsdec(m_pLine,p);
  145.    i--;
  146. }
  147. m_pLine = p;
  148. }
  149. inline CTextParse::operator LPCTSTR() const
  150. {
  151. return m_pStartLine;
  152. }
  153. inline CTextParse::operator LPTSTR() 
  154. {
  155. Reset();
  156. return m_szBuffer;
  157. }
  158. // prefix
  159. inline LPCTSTR CTextParse::operator++(int)
  160. {
  161. MoveForward();
  162. return (LPCTSTR&)*m_pLine;
  163. }
  164. // postfix
  165. inline LPTSTR &CTextParse::operator++()
  166. {
  167. LPCTSTR p = m_pLine;
  168. MoveForward();
  169. return (LPTSTR&)*p;
  170. }
  171. inline LPCTSTR CTextParse::operator--(int)
  172. {
  173. MoveBack();
  174. return m_pLine;
  175. }
  176. inline LPCTSTR &CTextParse::operator--()
  177. {
  178. LPCTSTR p = m_pLine;
  179. MoveBack();
  180. return (LPCTSTR&)*p;
  181. }
  182. inline BOOL CTextParse::IsEnd()
  183. {
  184. return *m_pLine == '';
  185. }
  186. inline int CTextParse::GetMax()
  187. {
  188. return MAX_BUF;
  189. }
  190. inline int CTextParse::GetCurrentChar()
  191. {
  192. return *m_pLine;
  193. }
  194. inline void CTextParse::SetAtCurrent(int c)
  195. {
  196. int i = m_pLine-m_szBuffer;
  197. m_szBuffer[i] = c;
  198. }
  199. inline void CTextParse::Set(LPCTSTR p)
  200. {
  201. m_pStartLine = p;
  202. m_pLine = p;
  203. m_pSavePos = p;
  204. }
  205. inline void CTextParse::Reset()
  206. {
  207. m_pLine = m_pStartLine;
  208. }
  209. inline void CTextParse::SaveCurPos()
  210. {
  211. m_pSavePos = m_pLine;
  212. }
  213. inline void CTextParse::RestorePos()
  214. {
  215. m_pLine = m_pSavePos;
  216. }
  217. inline BOOL CTextParse::CharAtStart(int c)
  218. {
  219. return *m_pStartLine == c;
  220. }
  221. inline BOOL CTextParse::CharAtStart(LPCTSTR strTok)
  222. {
  223. return IsToken(strTok,m_pStartLine);
  224. }
  225. inline BOOL CTextParse::CharAtCurrent(int c)
  226. {
  227. return *m_pLine == c;
  228. }
  229. inline BOOL CTextParse::CharAtCurrent(LPCTSTR strTok)
  230. {
  231. return IsToken(strTok,m_pLine);
  232. }
  233. inline BOOL CTextParse::StringAtStart(LPCTSTR str)
  234. {
  235. return(_tcsncmp(m_pStartLine,str,_tcslen(str)) == 0);
  236. }
  237. inline BOOL CTextParse::StringAtCurrent(LPCTSTR str)
  238. {
  239. return(_tcsncmp(m_pLine,str,_tcslen(str)) == 0);
  240. }
  241. inline BOOL CTextParse::CharExist(int c,BOOL bForward)
  242. {
  243. return _tcschr(m_pStartLine,c) != NULL;
  244. }
  245. inline BOOL CTextParse::StringExist(LPCTSTR str)
  246. {
  247. return _tcsstr(m_pLine,str) != NULL;
  248. }
  249. inline BOOL CTextParse::StringExistInString(LPCTSTR str)
  250. {
  251. return _tcsstr(m_pStartLine,str) != NULL;
  252. }
  253. inline BOOL CTextParse::SkipWord(BOOL bForward)
  254. {
  255. return MoveUntilChar(CPP_WHITE_SPACE,bForward);
  256. }
  257. inline BOOL CTextParse::SkipWhiteSpace(BOOL bForward)
  258. {
  259. return MoveWhileChar(CPP_WHITE_SPACE,bForward);
  260. }
  261. inline BOOL CTextParse::IsString(LPCTSTR str)
  262. {
  263. return(_tcsncmp(m_pLine,str,_tcslen(str)) == 0);
  264. }
  265. inline LPCTSTR CTextParse::CopyUntilWhiteSpace()
  266. {
  267. return CopyUntilChar(CPP_WHITE_SPACE);
  268. }
  269. inline LPCTSTR CTextParse::CopyWhileWhiteSpace()
  270. {
  271. return CopyWhileChar(CPP_WHITE_SPACE);
  272. }
  273. inline BOOL CTextParse::MoveWhileWhiteSpace(BOOL bForward)
  274. {
  275. return MoveWhileChar(CPP_WHITE_SPACE,bForward);
  276. }
  277. inline BOOL CTextParse::MoveUntilWhiteSpace(BOOL bForward)
  278. {
  279. return MoveUntilChar(CPP_WHITE_SPACE,bForward);
  280. }
  281. // move to last char
  282. inline void CTextParse::MoveToLastChar()
  283. {
  284. LPCTSTR p = m_pLine;
  285. while (*p != '')
  286.    p = _tcsinc(p);
  287. if (p != m_pLine)
  288. p = _tcsdec(m_pStartLine,p);
  289. m_pLine = p;
  290. }
  291. #endif