/*********************************************************************
Copyright (C) 2001/2 by
Alexander Berthold, alexander-berthold@web.de.
Hoegestr. 54
79108 Freiburg i. Breisgau
Germany
-- This file is part of cxTokenizer --
"cxTokenizer" is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or any later version.
"cxTokenizer" is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with "cxTokenizer"; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
---------------------------------------------------------------
If you find any bugs or if you make other corrections/
enhancements, i'd appreciate if you'd let me know about
that. My email is
alexander-berthold@web.de
If you share this code, do not remove this text.
---------------------------------------------------------------
Class: cxTokenizerMatchTokenRule
Author: Alexander Berthold
Copyright: Alexander Berthold
Date: 2001/12/19
Version: 0.2.01
Purpose: Templated computed rule which is intended for use as
a hybrid rule (i.e. consisting of a 'normal' string
prefix followed by a computed rule)
Version history:
- 2001/12/19
Current source labeled version 0.2.01
*********************************************************************/
// cxTokenizerMatchTokenRule.h: interface for the cxTokenizerCommentTokenRule class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_cxTokenizerMatchTokenRule_H__79C1EEB5_347E_4722_9223_11E25DC0E2EB__INCLUDED_)
#define AFX_cxTokenizerMatchTokenRule_H__79C1EEB5_347E_4722_9223_11E25DC0E2EB__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class name_functor
{
public:
name_functor(LPCTSTR lpszName)
{
strName = lpszName;
};
std::tstring strName;
const std::tstring& operator()()
{
return strName;
}
};
template<name_functor* pfunctor, int nHybridLength, TCHAR tcEnd, TCHAR tcEnd1, bool fCollect, bool fAcceptLastChar>
class cxTokenizerMatchTokenRule : public cxTokenizerTokenRule
{
// Construction/Destruction
public:
cxTokenizerMatchTokenRule(int nIDValue, xttr_flags ttrf, const std::tstring& strInitString);
virtual ~cxTokenizerMatchTokenRule();
// Attributes
protected:
class cxTokenizerMatchContextCookie : public cxTokenizerContextCookie
{
// Construction/Destruction
public:
cxTokenizerMatchContextCookie()
{
fCompleted =false;
fEndExpected =false;
};
// Attributes
public:
bool fCompleted;
bool fEndExpected;
std::tstring strResult;
void vAddToResultString(TCHAR tc)
{
if(fCollect)
strResult += tc;
};
};
// Operations
public:
virtual std::tstring strGetTokenString() const { return (*pfunctor)(); };
virtual void vSetArguments(const std::tstring& strArgs);
virtual bool fCheckValid() const
{ return true; };
virtual bool fDoesApply( const cxTokenizerContext *ptcContext, TCHAR tcChar, bool *pfComplete,
int nStartPos, int nCurPos) const;
virtual void vApplied( cxTokenizerContext *ptcContext, TCHAR tcChar, bool fComplete,
int nStartPos, int nCurPos) const;
virtual bool fGetResultString(const cxTokenizerContext *ptcContext, std::tstring& strResult) const;
};
#include "cxTokenizerMatchTokenRule.inl"
#endif // !defined(AFX_cxTokenizerCommentTokenRule_H__79C1EEB5_347E_4722_9223_11E25DC0E2EB__INCLUDED_)