You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1146 lines
47 KiB
C
1146 lines
47 KiB
C
2 years ago
|
// XTPSyntaxEditLexParser.h
|
||
|
//
|
||
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
||
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
||
|
//
|
||
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
||
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
||
|
// CONSENT OF CODEJOCK SOFTWARE.
|
||
|
//
|
||
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
||
|
// IN THE XTREME SYNTAX EDIT LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
||
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
||
|
// SINGLE COMPUTER.
|
||
|
//
|
||
|
// CONTACT INFORMATION:
|
||
|
// support@codejock.com
|
||
|
// http://www.codejock.com
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
#if !defined(__XTPSYNTAXEDITLEXPARSER_H__)
|
||
|
#define __XTPSYNTAXEDITLEXPARSER_H__
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif // _MSC_VER > 1000
|
||
|
|
||
|
class CXTPSyntaxEditColorTheme;
|
||
|
class CXTPNotifySink;
|
||
|
class CXTPNotifyConnection;
|
||
|
class CXTPSyntaxEditBufferManager;
|
||
|
class CXTPNotifyConnectionMT;
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
typedef CList<XTP_EDIT_TEXTBLOCK, XTP_EDIT_TEXTBLOCK> CXTPSyntaxEditTextBlockList;
|
||
|
typedef CArray<XTP_EDIT_TEXTBLOCK, XTP_EDIT_TEXTBLOCK&> CXTPSyntaxEditTextBlockArray;
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
namespace XTPSyntaxEditLexAnalyser
|
||
|
{
|
||
|
class CXTPSyntaxEditLexObj_ActiveTags;
|
||
|
class CXTPSyntaxEditLexClass;
|
||
|
class CXTPSyntaxEditLexClassInfoArray;
|
||
|
class CXTPSyntaxEditLexOnScreenParseCnt;
|
||
|
|
||
|
|
||
|
//========================================================================
|
||
|
// Summary:
|
||
|
// Enumerates flags which indicate results of parse functions calls.
|
||
|
// See also:
|
||
|
// CXTPSyntaxEditLexClass, CXTPSyntaxEditLexTextSchema
|
||
|
//========================================================================
|
||
|
enum XTPSyntaxEditLexParseResult
|
||
|
{
|
||
|
xtpEditLPR_Unknown = 0, // Undefined value.
|
||
|
xtpEditLPR_StartFound = 0x001, // Start text block was found
|
||
|
xtpEditLPR_EndFound = 0x002, // End text block was found
|
||
|
xtpEditLPR_Iterated = 0x010, // Indicate that current text position has already moved to the next char inside a function call.
|
||
|
xtpEditLPR_TBpop1 = 0x020, // Indicate that new found text block should be inserted before previous one and as a parent of it.
|
||
|
xtpEditLPR_Error = 0x100, // Iterated parse process breaked due to some error. See trace for details.
|
||
|
xtpEditLPR_RunFinished = 0x200, // Run iterated parse process (or some big part of it) is finished.
|
||
|
xtpEditLPR_RunBreaked = 0x400, // Run iterated parse process (or some big part of it) is breaked.
|
||
|
xtpEditLPR_RunRestart = 0x800, // Restart run children from the beginning.
|
||
|
|
||
|
//xtpEditLPR_NeedFullReparse = 0x1000, // Cannot reparse only specified piece of text. Full reparse is necessary.
|
||
|
};
|
||
|
|
||
|
//========================================================================
|
||
|
// Summary:
|
||
|
// This class is designed to store coordinates of text region.
|
||
|
// See also:
|
||
|
// XTP_EDIT_LINECOL
|
||
|
//========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPSyntaxEditTextRegion
|
||
|
{
|
||
|
public:
|
||
|
XTP_EDIT_LINECOL m_posStart; // start position in document coordinates.
|
||
|
XTP_EDIT_LINECOL m_posEnd; // end position in document coordinates.
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Clears coordinates.
|
||
|
//--------------------------------------------------------------------
|
||
|
void Clear();
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Sets coordinates.
|
||
|
// Parameters:
|
||
|
// pLCStart : [in] start position in document coordinates.
|
||
|
// pLCEnd : [in] end position in document coordinates.
|
||
|
//--------------------------------------------------------------------
|
||
|
void Set(const XTP_EDIT_LINECOL* pLCStart, const XTP_EDIT_LINECOL* pLCEnd);
|
||
|
|
||
|
};
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
typedef CArray<CXTPSyntaxEditTextRegion, const CXTPSyntaxEditTextRegion&> CXTPSyntaxEditInvalidZoneArray;
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
//===========================================================================
|
||
|
// Summary:
|
||
|
// This class stores tokens definition: a list of tokens and corresponding
|
||
|
// lists of start and end tokens separators.
|
||
|
//===========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPSyntaxEditLexTokensDef
|
||
|
{
|
||
|
public:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Default object constructor.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexTokensDef(){};
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Copy object constructor.
|
||
|
// Parameters:
|
||
|
// rSrc : [in] Reference to source CXTPSyntaxEditLexTokensDef object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexTokensDef(const CXTPSyntaxEditLexTokensDef& rSrc);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Object destructor. Handles clean up and deallocations.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual ~CXTPSyntaxEditLexTokensDef();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Assignment operator for class.
|
||
|
// Parameters:
|
||
|
// rSrc : [in] Reference to source CXTPSyntaxEditLexTokensDef object.
|
||
|
// Returns:
|
||
|
// Reference to CXTPSyntaxEditLexTokensDef object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
const CXTPSyntaxEditLexTokensDef& operator=(const CXTPSyntaxEditLexTokensDef& rSrc);
|
||
|
|
||
|
CStringArray m_arTokens; // Stores list of tokens.
|
||
|
CStringArray m_arStartSeps; // Stores list of start separators.
|
||
|
CStringArray m_arEndSeps; // Stores list of end separators.
|
||
|
};
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
typedef CArray<CXTPSyntaxEditLexTokensDef, const CXTPSyntaxEditLexTokensDef&> CXTPSyntaxEditLexTokensDefArray;
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
//========================================================================
|
||
|
// Summary:
|
||
|
// This class is designed to easily manipulate parser options.
|
||
|
//========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPSyntaxEditLexParserSchemaOptions : public CXTPCmdTarget
|
||
|
{
|
||
|
public:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Default object constructor.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexParserSchemaOptions();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Object constructor.
|
||
|
// Parameters:
|
||
|
// rSrc : [in] Reference to source CXTPSyntaxEditLexParserSchemaOptions.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexParserSchemaOptions(const CXTPSyntaxEditLexParserSchemaOptions& rSrc);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Overloaded equals operator.
|
||
|
// Parameters:
|
||
|
// rSrc : [in] Reference to source CXTPSyntaxEditLexParserSchemaOptions.
|
||
|
//-----------------------------------------------------------------------
|
||
|
const CXTPSyntaxEditLexParserSchemaOptions& operator=(const CXTPSyntaxEditLexParserSchemaOptions& rSrc);
|
||
|
|
||
|
//global:
|
||
|
BOOL m_bFirstParseInSeparateThread; // {0,1} default=1
|
||
|
BOOL m_bEditReparceInSeparateThread; // {0,1} default=1
|
||
|
BOOL m_bConfigChangedReparceInSeparateThread; // {0,1} default=1
|
||
|
DWORD m_dwMaxBackParseOffset; // default=100; maximum back buffer size. Some times parser look back for the text from current position.
|
||
|
DWORD m_dwEditReparceTimeout_ms; // default=500 ms; time out for start reparse after last key was pressed.
|
||
|
DWORD m_dwOnScreenSchCacheLifeTime_sec; // default=180 sec; time out for on screen parsed pices of text. for memory using optimization.
|
||
|
DWORD m_dwParserThreadIdleLifeTime_ms; // default=60 sec; time out for existing of parser thread when parser idle (no parse requests).
|
||
|
};
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
//=======================================================================
|
||
|
// Summary:
|
||
|
//
|
||
|
//=======================================================================
|
||
|
class _XTP_EXT_CLASS CXTPSyntaxEditLexClassSchema : public CXTPCmdTarget
|
||
|
{
|
||
|
friend class CXTPSyntaxEditLexTextSchema;
|
||
|
public:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Default object constructor.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexClassSchema();
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Object destructor. Handles clean up and deallocations.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual ~CXTPSyntaxEditLexClassSchema();
|
||
|
|
||
|
virtual void AddPreBuildClass(CXTPSyntaxEditLexClass* pClass);
|
||
|
|
||
|
virtual BOOL Build();
|
||
|
|
||
|
virtual BOOL Copy(CXTPSyntaxEditLexClassSchema* pDest);
|
||
|
|
||
|
virtual void Close();
|
||
|
|
||
|
virtual void RemoveAll();
|
||
|
|
||
|
virtual CXTPSyntaxEditLexClassPtrArray* GetClasses(BOOL bShortSch);
|
||
|
|
||
|
virtual CXTPSyntaxEditLexClassPtrArray* GetPreBuildClasses();
|
||
|
virtual CXTPSyntaxEditLexClass* GetPreBuildClass(const CString& strName);
|
||
|
|
||
|
virtual CXTPSyntaxEditLexClass* GetNewClass(BOOL bForFile);
|
||
|
|
||
|
virtual CXTPSyntaxEditLexObj_ActiveTags* GetActiveTagsFor(CXTPSyntaxEditLexClass* pTopClass);
|
||
|
|
||
|
//virtual CXTPSyntaxEditLexObj_ActiveTags* GetActiveTags(BOOL bShortSch);
|
||
|
|
||
|
protected:
|
||
|
virtual BOOL Build_ChildrenFor(BOOL bDynamic, CXTPSyntaxEditLexClass* pCBase,
|
||
|
CStringArray& rarAdded, int& rnNextClassID,
|
||
|
int nLevel = 0);
|
||
|
|
||
|
virtual CXTPSyntaxEditLexClassPtrArray* GetChildrenFor(CXTPSyntaxEditLexClass* pClass, BOOL& rbSelfChild);
|
||
|
virtual CXTPSyntaxEditLexClassPtrArray* GetDynChildrenFor(CXTPSyntaxEditLexClass* pClass, BOOL& rbSelfChild);
|
||
|
|
||
|
virtual void GetDynParentsList(CXTPSyntaxEditLexClass* pClass, CStringArray& rarDynParents,
|
||
|
CStringArray& rarProcessedClasses);
|
||
|
|
||
|
virtual int CanBeParentDynForChild(CString strParentName, CXTPSyntaxEditLexClass* pCChild);
|
||
|
|
||
|
virtual BOOL Build_ShortTree();
|
||
|
|
||
|
virtual BOOL PostBuild_Step(CXTPSyntaxEditLexClassPtrArray* pArClasses);
|
||
|
|
||
|
virtual BOOL CopyChildrenFor(BOOL bShort, CXTPSyntaxEditLexClass* pCDest,
|
||
|
CXTPSyntaxEditLexClass* pCSrc, int nLevel);
|
||
|
|
||
|
CXTPSyntaxEditLexClassPtrArray m_arPreBuildClassesList;
|
||
|
|
||
|
CXTPSyntaxEditLexClassPtrArray m_arClassesTreeShort;
|
||
|
CXTPSyntaxEditLexClassPtrArray m_arClassesTreeFull;
|
||
|
|
||
|
//CXTPSyntaxEditLexObj_ActiveTags m_arAllActiveTagsShort;
|
||
|
//CXTPSyntaxEditLexObj_ActiveTags m_arAllActiveTagsFull;
|
||
|
};
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
//===========================================================================
|
||
|
// Summary:
|
||
|
// CXTPSyntaxEditLexTextBlock class represents a pice (block) of text which
|
||
|
// corresponds some lex class in a text schema.
|
||
|
// It stores start position, end position, pointer to the lex class
|
||
|
// object in a class schema and some other information.
|
||
|
// Text blocks organized as a bidirectional list and as tree structure.
|
||
|
//===========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPSyntaxEditLexTextBlock : public CXTPCmdTarget
|
||
|
{
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
friend class CXTPSyntaxEditLexTextSchema;
|
||
|
friend class CXTPSyntaxEditLexClass;
|
||
|
friend class CXTPSyntaxEditLexClass_file;
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
public:
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Default object constructor.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexTextBlock();
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Object destructor. Handles clean up and deallocations.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual ~CXTPSyntaxEditLexTextBlock();
|
||
|
|
||
|
CXTPSyntaxEditLexClassPtr m_ptrLexClass; // Pointer to the LexClass object.
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrParent; // Pointer to the parent block object.
|
||
|
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrPrev; // Pointer to the previous block.
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrNext; // Pointer to the next block.
|
||
|
|
||
|
XTP_EDIT_LINECOL m_PosStartLC; // Text block start position.
|
||
|
XTP_EDIT_LINECOL m_PosEndLC; // Text block start position.
|
||
|
BOOL m_bEndByParent; // Text block ended when the parent block ended.
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get Text block end position.
|
||
|
// Parameters:
|
||
|
// bMaxIfInvalid - [in] If TRUE returns XTP_EDIT_LINECOL::MAXPOS for
|
||
|
// invalid position. If FALSE returns
|
||
|
// XTP_EDIT_LINECOL::MINPOS for invalid position.
|
||
|
// Returns:
|
||
|
// Value of m_PosEndLC if it is valid, otherwise maximum or minimum
|
||
|
// value depends on parameter bMaxIfInvalid.
|
||
|
// See Also:
|
||
|
// XTP_EDIT_LINECOL, m_PosEndLC, m_PosStartLC.
|
||
|
//--------------------------------------------------------------------
|
||
|
XTP_EDIT_LINECOL GetPosEndLC(BOOL bMaxIfInvalid = TRUE);
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get text block start tag end position in the text.
|
||
|
// Returns:
|
||
|
// Text block start tag end position in XLC form.
|
||
|
// See Also:
|
||
|
// XTP_EDIT_LINECOL::GetXLC(), XTP_EDIT_XLC() macros.
|
||
|
//--------------------------------------------------------------------
|
||
|
DWORD GetStartTagEndXLC();
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get text block end tag begin position in the text.
|
||
|
// Returns:
|
||
|
// Text block end tag begin position in XLC form.
|
||
|
// See Also:
|
||
|
// XTP_EDIT_LINECOL::GetXLC(), XTP_EDIT_XLC() macros.
|
||
|
//--------------------------------------------------------------------
|
||
|
DWORD GetEndTagBeginXLC();
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get text block end tag end position in the text.
|
||
|
// Returns:
|
||
|
// Text block end tag end position in XLC form.
|
||
|
// See Also:
|
||
|
// XTP_EDIT_LINECOL::GetXLC(), XTP_EDIT_XLC() macros.
|
||
|
//--------------------------------------------------------------------
|
||
|
DWORD GetEndTagEndXLC();
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Release references to other objects.
|
||
|
// Remarks:
|
||
|
// This method is used in text schema destruction process.
|
||
|
// See Also:
|
||
|
// CXTPSyntaxEditLexTextSchema::Close().
|
||
|
//--------------------------------------------------------------------
|
||
|
virtual void Close();
|
||
|
//virtual void Close(BOOL bWithPrev = FALSE, BOOL bWithNext = FALSE);
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This methods compare lex classes names for 2 text blocks.
|
||
|
// Parameters:
|
||
|
// pTB2 - [in] Second text block to compare.
|
||
|
// Returns:
|
||
|
// TRUE if lex classes names for 2 text blocks are equal,
|
||
|
// FALSE otherwise.
|
||
|
//--------------------------------------------------------------------
|
||
|
virtual BOOL IsEqualLexClasses(CXTPSyntaxEditLexTextBlock* pTB2) const;
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method determine is the specified text block included
|
||
|
// in the current text block.
|
||
|
// Parameters:
|
||
|
// pTB2 - [in] Text block pointer.
|
||
|
// Returns:
|
||
|
// TRUE if the specified text block included in the current text
|
||
|
// block, FALSE otherwise.
|
||
|
//--------------------------------------------------------------------
|
||
|
virtual BOOL IsInclude(CXTPSyntaxEditLexTextBlock* pTB2) const;
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method determine is text block look like closed or
|
||
|
// partly closed.
|
||
|
// Returns:
|
||
|
// TRUE if some or all references to other objects are NULL,
|
||
|
// FALSE otherwise.
|
||
|
//----------------------------------------------------------------
|
||
|
virtual BOOL IsLookLikeClosed() const;
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method set end position to not ended children blocks.
|
||
|
// Parameters:
|
||
|
// pTxtSch - [in] Text schema pointer to send notifications.
|
||
|
// bEndByParent - BOOL flag
|
||
|
// Returns:
|
||
|
// Ended children blocks count.
|
||
|
//----------------------------------------------------------------
|
||
|
virtual int EndChildren(CXTPSyntaxEditLexTextSchema* pTxtSch = NULL, BOOL bEndByParent = TRUE);
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method searches previous child block for the specified
|
||
|
// child. This block is parent.
|
||
|
// Parameters:
|
||
|
// pChild - [in] Child block pointer.
|
||
|
// bWithAddRef : [in] If TRUE - InternalAddRef() is called before
|
||
|
// Returns:
|
||
|
// Previous child block pointer or NULL.
|
||
|
//----------------------------------------------------------------
|
||
|
virtual CXTPSyntaxEditLexTextBlock* GetPrevChild(CXTPSyntaxEditLexTextBlock* pChild, BOOL bWithAddRef);
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
virtual void Dump(CDumpContext& dc) const;
|
||
|
#endif
|
||
|
|
||
|
protected:
|
||
|
int m_nStartTagLen; // Start tag length.
|
||
|
int m_nEndTagXLCLen; // End tag length in XLC form.
|
||
|
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrLastChild; // for internal use only. not always contains correct value
|
||
|
};
|
||
|
|
||
|
//===========================================================================
|
||
|
// Summary:
|
||
|
// CXTPSyntaxEditLexTextSchema class is used to store data which necessary to
|
||
|
// parse a text and parsing results. It also contains methods to run
|
||
|
// lex classes from a class schema, methods to update text schema
|
||
|
// when text is edited, methods to reparse text, to get information
|
||
|
// which is necessary to draw colorized text and other helper methods.
|
||
|
//===========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPSyntaxEditLexTextSchema : public CXTPCmdTarget
|
||
|
{
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
friend class CXTPSyntaxEditLexClass;
|
||
|
friend class CXTPSyntaxEditLexClass_file;
|
||
|
friend class CXTPSyntaxEditLexTextBlock;
|
||
|
friend class CXTPSyntaxEditLexParser;
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
public:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Default object constructor.
|
||
|
// Parameters:
|
||
|
// pcszSchName - [in] Schema name.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexTextSchema(LPCTSTR pcszSchName);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Object destructor. Handles clean up and deallocations.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual ~CXTPSyntaxEditLexTextSchema();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get text schema name.
|
||
|
// Returns:
|
||
|
// Text schema name string.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual CString GetSchName() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Destroy all interlocked objects references and free all
|
||
|
// stored objects.
|
||
|
// Remarks:
|
||
|
// Call this method to delete schema.
|
||
|
// See Also:
|
||
|
// RemoveAll(), CXTPSyntaxEditLexClassSchema::Close().
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void Close();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Destroy text blocks list.
|
||
|
// Parameters:
|
||
|
// pFirst - A pointer to the first element in the list to destroy.
|
||
|
// Remarks:
|
||
|
// This helper method is called to destroy separately stored text
|
||
|
// blocks list (text schema).
|
||
|
// See Also:
|
||
|
// CXTPSyntaxEditLexTextBlock::Close().
|
||
|
//-----------------------------------------------------------------------
|
||
|
static void AFX_CDECL Close(CXTPSyntaxEditLexTextBlock* pFirst);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Remove all text block from the schema.
|
||
|
// Remarks:
|
||
|
// Schema object is not destroyed, just only blocks are removed.
|
||
|
// See Also:
|
||
|
// RemoveAll(), CXTPSyntaxEditLexClassSchema::Close().
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void RemoveAll();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Create a new text schema object and init its internal
|
||
|
// infrastructure (like class schema) from the current schema.
|
||
|
// Remarks:
|
||
|
// Text blocks are not copied. The class schema is copied.
|
||
|
// Returns:
|
||
|
// A new text schema object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual CXTPSyntaxEditLexTextSchema* Clone();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Returns notification connection.
|
||
|
// Returns:
|
||
|
// CXTPNotifyConnectionPtr pointer.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual CXTPNotifyConnection* GetConnection();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method run parse for the text.
|
||
|
// Parameters:
|
||
|
// bShort - [in] If TRUE the short (global blocks only)
|
||
|
// class schema is used, otherwise full
|
||
|
// (global and onscreen blocks) class schema
|
||
|
// is used.
|
||
|
// pTxtIter - [in] Text iterator object.
|
||
|
// pLCStart - [in] Start text position for parse/reparse.
|
||
|
// pLCEnd - [in] End text position for parse/reparse.
|
||
|
// bSendProgressEvents - [in] If TRUE the progress parsing events
|
||
|
// will be sent using connection object.
|
||
|
// Remarks:
|
||
|
// Special parameters values:
|
||
|
// pLCStart = NULL, pLCEnd = NULL
|
||
|
// - parse from the last parsed block to the end of the text
|
||
|
//
|
||
|
// pLCStart = XTP_EDIT_LINECOL::Pos1, pLCEnd = NULL
|
||
|
// - parse (reparse) all text from the begin
|
||
|
// Returns:
|
||
|
// Parse result as flag from enum XTPSyntaxEditLexParseResult.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual int RunParseUpdate(BOOL bShort, CTextIter* pTxtIter,
|
||
|
const XTP_EDIT_LINECOL* pLCStart = NULL,
|
||
|
const XTP_EDIT_LINECOL* pLCEnd = NULL,
|
||
|
BOOL bSendProgressEvents = FALSE);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Returns text region for which schema was updated during last
|
||
|
// parse/reparse operation.
|
||
|
// Returns:
|
||
|
// CXTPSyntaxEditTextRegion object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual const CXTPSyntaxEditTextRegion& GetUpdatedTextRegion() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method run parse for the text on screen.
|
||
|
// Parameters:
|
||
|
// pTxtIter - [in] Text iterator object.
|
||
|
// nRowStart - [in] Start row for parse.
|
||
|
// nRowEnd - [in] End row for parse.
|
||
|
// rPtrScreenSchFirstTB - [out] Reference to store first text
|
||
|
// block of text schema which is built.
|
||
|
// Remarks:
|
||
|
// This method perform full parsing for the specified text region
|
||
|
// using previously parsed short text schema (or global blocks schema).
|
||
|
// Returns:
|
||
|
// TRUE if successful, FALSE otherwise
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual BOOL RunParseOnScreen(CTextIter* pTxtIter,
|
||
|
int nRowStart, int nRowEnd,
|
||
|
CXTPSyntaxEditLexTextBlockPtr& rPtrScreenSchFirstTB );
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method get row as list of blocks with different colors
|
||
|
// to draw.
|
||
|
// Parameters:
|
||
|
// pTxtIter - [in] Text iterator object.
|
||
|
// nRow - [in] Row number.
|
||
|
// nColFrom - [in] Row col to get colors from.
|
||
|
// nColTo - [in] Row col to get colors to.
|
||
|
// clrDefault - [in] Default colors.
|
||
|
// rBlocks - [out] List of color blocks.
|
||
|
// pptrTBStartCache - [in out] Cached text block to start search.
|
||
|
// May be NULL.
|
||
|
// pFirstSchTB - [in] External text schema first block or NULL.
|
||
|
// Used for OnScreen schemas.
|
||
|
// Remarks:
|
||
|
// This method build list of color blocks for the specified row
|
||
|
// using external or internal text schema.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void GetRowColors(CTextIter* pTxtIter, int nRow,
|
||
|
int nColFrom, int nColTo,
|
||
|
const XTP_EDIT_COLORVALUES& clrDefault,
|
||
|
CXTPSyntaxEditTextBlockList* rBlocks,
|
||
|
CXTPSyntaxEditLexTextBlockPtr* pptrTBStartCache = NULL,
|
||
|
CXTPSyntaxEditLexTextBlock* pFirstSchTB = NULL);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method get row as list of collapsible blocks which
|
||
|
// include this row.
|
||
|
// Parameters:
|
||
|
// nRow - [in] Row number. By Leva: passing nRow < 0 will cause
|
||
|
// to return block for all rows
|
||
|
// rArBlocks - [out] List of collapsible blocks which
|
||
|
// include this row.
|
||
|
// pptrTBStartCache - [in out] Cached text block to start search.
|
||
|
// May be NULL.
|
||
|
// Remarks:
|
||
|
// This method build list of collapsible blocks which include
|
||
|
// the specified row using external or internal text schema.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void GetCollapsableBlocksInfo(int nRow, CXTPSyntaxEditRowsBlockArray& rArBlocks,
|
||
|
CXTPSyntaxEditLexTextBlockPtr* pptrTBStartCache = NULL);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This helper method read attributes of the text from lex class
|
||
|
// of specified text block.
|
||
|
// Parameters:
|
||
|
// rTB - [out] Draw text block object to fill text attributes.
|
||
|
// pTextBlock - [in] Text block object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void GetTextAttributes(XTP_EDIT_TEXTBLOCK& rTB, CXTPSyntaxEditLexTextBlock* pTextBlock);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Apply color theme to the text schema.
|
||
|
// Parameters:
|
||
|
// pTheme - [in] A pointer to Color Theme object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void ApplyTheme(CXTPSyntaxEditColorTheme* pTheme);
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Load class schema.
|
||
|
// Parameters:
|
||
|
// arClassInfo - [in] A reference to CXTPSyntaxEditLexClassInfoArray array.
|
||
|
// Returns:
|
||
|
// TRUE if successful, FALSE otherwise
|
||
|
//--------------------------------------------------------------------
|
||
|
BOOL LoadClassSchema(CXTPSyntaxEditLexClassInfoArray* arClassInfo);
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Determine is this schema support specified file extension.
|
||
|
// Parameters:
|
||
|
// strExt - [in] Extension string.
|
||
|
// Remarks:
|
||
|
// Extension string format: ".ext"
|
||
|
// For example: ".cpp"
|
||
|
// Returns:
|
||
|
// TRUE if specified file extension is supported, FALSE otherwise.
|
||
|
//--------------------------------------------------------------------
|
||
|
BOOL IsFileExtSupported(const CString& strExt);
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this member function before using schema object.
|
||
|
// Remarks:
|
||
|
// To make edit control startup faster - schemas do not built
|
||
|
// during loading. This member function build the schema if necessary
|
||
|
// (or do nothing).
|
||
|
//--------------------------------------------------------------------
|
||
|
void BuildIfNeed();
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get top lex class for specified file extension.
|
||
|
// Parameters:
|
||
|
// strExt - [in] Extension string.
|
||
|
// Remarks:
|
||
|
// Extension string format: ".ext"
|
||
|
// For example: ".cpp"
|
||
|
// InternalAddRef() is called for the returned object.
|
||
|
// Returns:
|
||
|
// Pointer to the lex class or NULL.
|
||
|
//--------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexClass* GetTopClassForFileExt(const CString& strExt);
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get text block by ID. Used together with xtpEditOnTextBlockParsed
|
||
|
// notification.
|
||
|
// Parameters:
|
||
|
// dwID - [in] ID from xtpEditOnTextBlockParsed notification.
|
||
|
// Remarks:
|
||
|
// InternalAddRef() is called for the returned object.
|
||
|
// Returns:
|
||
|
// Pointer to the text block or NULL.
|
||
|
//--------------------------------------------------------------------
|
||
|
virtual CXTPSyntaxEditLexTextBlock* GetLastParsedBlock(WPARAM dwID = 0);
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get first text schema block..
|
||
|
// Remarks:
|
||
|
// InternalAddRef() is called for the returned object.
|
||
|
// Returns:
|
||
|
// Pointer to the text block or NULL.
|
||
|
//--------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexTextBlock* GetBlocks();
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get critical section object to lock schema data (text blocks and others).
|
||
|
// Returns:
|
||
|
// Pointer to the critical section object.
|
||
|
//--------------------------------------------------------------------
|
||
|
CMutex* GetDataLoker();
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get critical section object to lock class schema.
|
||
|
// Returns:
|
||
|
// Pointer to the critical section object.
|
||
|
//--------------------------------------------------------------------
|
||
|
CMutex* GetClassSchLoker();
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get event object to break parsing process.
|
||
|
// Returns:
|
||
|
// Pointer to the event object.
|
||
|
//--------------------------------------------------------------------
|
||
|
CEvent* GetBreakParsingEvent();
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
static void AFX_CDECL TraceClrBlocks(CXTPSyntaxEditTextBlockArray& arBlocks);
|
||
|
void TraceTxtBlocks(BOOL bFull); // for DEBUG only
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
protected:
|
||
|
|
||
|
//========================================================================
|
||
|
// Summary:
|
||
|
// This enum describes set of UpdateTextBlocks() return results.
|
||
|
//========================================================================
|
||
|
enum XTPSyntaxEditUpdateTBRes
|
||
|
{
|
||
|
xtpEditUTBNothing = 0, // void result
|
||
|
xtpEditUTBError = 0x0001, // Error result.
|
||
|
xtpEditUTBReparse = 0x0002, // one or few global blocks changed and reparse is need.
|
||
|
xtpEditUTBNearestUpdated = 0x0100, // This flag returned from UpdateTBNearest() only.
|
||
|
};
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get Class Schema for this text schema..
|
||
|
// Remarks:
|
||
|
// InternalAddRef() is called for the returned object.
|
||
|
// Returns:
|
||
|
// Pointer to the Class Schema object.
|
||
|
//--------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexClassSchema* GetClassSchema();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Apply color theme to specified lex classes.
|
||
|
// Parameters:
|
||
|
// pTheme - [in] A pointer to Color Theme object.
|
||
|
// ptrClasses - [in] A pointer to lex classes array.
|
||
|
// See Also:
|
||
|
// ApplyTheme().
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void ApplyThemeRecursive(CXTPSyntaxEditColorTheme* pTheme,
|
||
|
CXTPSyntaxEditLexClassPtrArray* ptrClasses);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Update text schema positions after editing action.
|
||
|
// Parameters:
|
||
|
// posFrom - [in] Start editing position.
|
||
|
// posTo - [in] End editing position.
|
||
|
// eEditAction - [in] Edit action. See XTPSyntaxEditEditAction.
|
||
|
// Returns:
|
||
|
// Update result - values from enum XTPSyntaxEditUpdateTBRes.
|
||
|
//-----------------------------------------------------------------------
|
||
|
int UpdateTextBlocks(XTP_EDIT_LINECOL posFrom, XTP_EDIT_LINECOL posTo,
|
||
|
int eEditAction);
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
virtual int RunChildren(CTextIter* pTxtIter,
|
||
|
CXTPSyntaxEditLexTextBlockPtr ptrTxtBlock,
|
||
|
CXTPSyntaxEditLexClass* pBase,
|
||
|
CXTPSyntaxEditLexOnScreenParseCnt* pOnScreenRunCnt = NULL);
|
||
|
|
||
|
virtual CXTPSyntaxEditLexTextBlock* GetPrevBlock(BOOL bWithAddRef = TRUE);
|
||
|
|
||
|
virtual CXTPSyntaxEditLexTextBlock* GetNewBlock();
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
private:
|
||
|
int UpdateTBNearest(CXTPSyntaxEditLexTextBlock* pNarestTB1,
|
||
|
int nLineDiff, int nColDiff,
|
||
|
XTP_EDIT_LINECOL posFrom, XTP_EDIT_LINECOL posTo,
|
||
|
int eEditAction );
|
||
|
|
||
|
//-------------------------------
|
||
|
CXTPSyntaxEditLexTextBlock* FindNearestTextBlock(XTP_EDIT_LINECOL posText);
|
||
|
|
||
|
virtual BOOL InitScreenSch(CTextIter* pTxtIter, int nRowStart, int nRowEnd,
|
||
|
CXTPSyntaxEditLexTextBlockPtr& rPtrScreenSchFirstTB,
|
||
|
CXTPSyntaxEditLexTextBlockPtr& rPtrTBParentToRun);
|
||
|
|
||
|
virtual CXTPSyntaxEditLexTextBlockPtr InitScreenSch_RunTopClass(CTextIter* pTxtIter);
|
||
|
|
||
|
virtual CXTPSyntaxEditLexTextBlock* CopyShortTBtoFull(CXTPSyntaxEditLexTextBlock* pTB);
|
||
|
virtual CXTPSyntaxEditLexClass* FindLexClassByID(CXTPSyntaxEditLexClassPtrArray* pClassesAr,
|
||
|
int nClassID);
|
||
|
|
||
|
virtual int Run_OnScreenTBStack(CTextIter* pTxtIter,
|
||
|
CXTPSyntaxEditLexTextBlock* pTBParentToRun,
|
||
|
CXTPSyntaxEditLexOnScreenParseCnt* pRunCnt);
|
||
|
|
||
|
|
||
|
virtual void UpdateLastSchBlock(CXTPSyntaxEditLexTextBlock* pLastTB, BOOL bPermanently = FALSE);
|
||
|
virtual CXTPSyntaxEditLexTextBlock* GetLastSchBlock(BOOL bWithAddRef = TRUE);
|
||
|
|
||
|
|
||
|
virtual UINT SendEvent_OnTextBlockParsed(CXTPSyntaxEditLexTextBlock* pTB);
|
||
|
|
||
|
virtual int Run_ParseUpdate0(BOOL bShort, CTextIter* pTxtIter,
|
||
|
const XTP_EDIT_LINECOL* pLCStart,
|
||
|
const XTP_EDIT_LINECOL* pLCEnd,
|
||
|
BOOL bSendProgressEvents);
|
||
|
|
||
|
virtual int Run_ClassesUpdate1(CTextIter* pTxtIter,
|
||
|
CXTPSyntaxEditLexTextBlockPtr ptrStartTB,
|
||
|
BOOL bStarted);
|
||
|
|
||
|
virtual int Run_ClassesUpdate2(CTextIter* pTxtIter,
|
||
|
CXTPSyntaxEditLexClassPtrArray* pArClasses,
|
||
|
CXTPSyntaxEditLexTextBlockPtr ptrParentTB,
|
||
|
CXTPSyntaxEditLexOnScreenParseCnt* pOnScreenRunCnt = NULL);
|
||
|
|
||
|
virtual BOOL IsBlockStartStillHere(CTextIter* pTxtIter, CXTPSyntaxEditLexTextBlock* pTB);
|
||
|
virtual void FinishNewChain(BOOL bByBreak, BOOL bEOF);
|
||
|
virtual void UpdateNewChainParentsChildren();
|
||
|
virtual void EndBlocksByParent(CXTPSyntaxEditLexTextBlock* pTBStart, CXTPSyntaxEditLexTextBlock* pTBEnd);
|
||
|
|
||
|
virtual void SeekNextEx(CTextIter* pTxtIter,
|
||
|
CXTPSyntaxEditLexClass* pRunClass = NULL,
|
||
|
CXTPSyntaxEditLexOnScreenParseCnt* pOnScreenRunCnt = NULL,
|
||
|
int nChars = 1
|
||
|
);
|
||
|
|
||
|
static void AFX_CDECL AddClrBlock(XTP_EDIT_TEXTBLOCK& rClrB, CXTPSyntaxEditTextBlockArray& arBlocks);
|
||
|
|
||
|
//==== Run parse update context members ====
|
||
|
CXTPSyntaxEditTextRegion m_curInvalidZone;
|
||
|
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrNewChainTB1;
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrNewChainTB2;
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrOldChainTBFirst;
|
||
|
|
||
|
typedef CMap<WPARAM, WPARAM, CXTPSyntaxEditLexTextBlockPtr, CXTPSyntaxEditLexTextBlockPtr&>
|
||
|
CXTPSyntaxEditLexID2TBmap;
|
||
|
|
||
|
CXTPSyntaxEditLexID2TBmap m_mapLastParsedBlocks;
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrLastParsedBlock;
|
||
|
BOOL m_bSendProgressEvents;
|
||
|
|
||
|
int m_nNoEndedClassesCount;
|
||
|
//==== END Run parse update context members ====
|
||
|
|
||
|
private:
|
||
|
//CCriticalSection m_csData;
|
||
|
//CCriticalSection m_csClassSch;
|
||
|
CMutex m_lockData;
|
||
|
CMutex m_lockClassSch;
|
||
|
|
||
|
CEvent m_evBreakParsing;
|
||
|
|
||
|
CXTPSyntaxEditLexClassSchema* m_pClassSchema;
|
||
|
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrFirstBlock;
|
||
|
CXTPSyntaxEditLexTextBlockPtr m_ptrLastSchBlock;
|
||
|
|
||
|
int m_nSeekNext_TagWaitChars;
|
||
|
|
||
|
CString m_strSchName;
|
||
|
|
||
|
CXTPNotifyConnectionMT* m_pConnectMT;
|
||
|
};
|
||
|
|
||
|
|
||
|
//===========================================================================
|
||
|
// Summary:
|
||
|
// This class used to 'run' lex schema parsing in separate thread.
|
||
|
// It also control this working thread and provide interthread interaction.
|
||
|
//===========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPSyntaxEditLexParser : public CXTPCmdTarget
|
||
|
{
|
||
|
public:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Default object constructor.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPSyntaxEditLexParser();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Object destructor. Handles clean up and deallocations.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual ~CXTPSyntaxEditLexParser();
|
||
|
|
||
|
//-------------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to stop parsing, destroy working thread and
|
||
|
// unadvise from all events.
|
||
|
// See Also: CloseParseThread, StopParseInThread
|
||
|
//-------------------------------------------------------------------------
|
||
|
virtual void Close();
|
||
|
|
||
|
//-------------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to stop parsing, destroy working thread.
|
||
|
// See Also: Close, StopParseInThread
|
||
|
//-------------------------------------------------------------------------
|
||
|
virtual void CloseParseThread();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to start parsing of specified text range
|
||
|
// in separate (working) thread. If parser already running and parse
|
||
|
// other text range, the new range added to a queue.
|
||
|
// Parameters:
|
||
|
// pBuffer - A pointer to CXTPSyntaxEditBufferManager object.
|
||
|
// pLCStart - Start text position to reparse or NULL to start from begin.
|
||
|
// pLCEnd - End text position to reparse or NULL to parse until end.
|
||
|
// eEdinAction - Zero (0) or value from XTPSyntaxEditEditAction enum.
|
||
|
// bRunWithoutWait - Start parse immediately or wait a timeout specified
|
||
|
// in global schema options.
|
||
|
// See Also: StopParseInThread, CloseParseThread
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void StartParseInThread(CXTPSyntaxEditBufferManager* pBuffer,
|
||
|
const XTP_EDIT_LINECOL* pLCStart = NULL,
|
||
|
const XTP_EDIT_LINECOL* pLCEnd = NULL,
|
||
|
int eEdinAction = 0,
|
||
|
BOOL bRunWithoutWait = FALSE);
|
||
|
|
||
|
//-------------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to stop parsing.
|
||
|
// See Also: Close, StartParseInThread
|
||
|
//-------------------------------------------------------------------------
|
||
|
virtual void StopParseInThread();
|
||
|
|
||
|
//-------------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to stop parsing in thread before call
|
||
|
// OnEditChanged.
|
||
|
// See Also: OnEditChanged
|
||
|
//-------------------------------------------------------------------------
|
||
|
virtual void OnBeforeEditChanged();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to reparse text after editing.
|
||
|
// Parameters:
|
||
|
// posFrom - Start position for edit action.
|
||
|
// posTo - End position for edit action.
|
||
|
// eEditAction - Value from XTPSyntaxEditEditAction enum.
|
||
|
// pBuffer - A pointer to CXTPSyntaxEditBufferManager object.
|
||
|
// See Also: OnBeforeEditChanged
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void OnEditChanged(const XTP_EDIT_LINECOL& posFrom,
|
||
|
const XTP_EDIT_LINECOL& posTo, int eEditAction,
|
||
|
CXTPSyntaxEditBufferManager* pBuffer);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to get active text shema.
|
||
|
// Returns:
|
||
|
// A pointer to CXTPSyntaxEditLexTextSchema.
|
||
|
// See Also: SetTextSchema
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual CXTPSyntaxEditLexTextSchema* GetTextSchema();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to set active text shema.
|
||
|
// Parameters:
|
||
|
// pTextSchema - A pointer to CXTPSyntaxEditLexTextSchema.
|
||
|
// See Also: GetTextSchema
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void SetTextSchema(CXTPSyntaxEditLexTextSchema* pTextSchema);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to get text shema global options.
|
||
|
// Parameters:
|
||
|
// strExt - A file extension to lookup schema.
|
||
|
// Returns:
|
||
|
// A pointer to CXTPSyntaxEditLexParserSchemaOptions.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual const CXTPSyntaxEditLexParserSchemaOptions* GetSchemaOptions(const CString& strExt);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Get priority for a working thread.
|
||
|
// Returns:
|
||
|
// A working thread priority.
|
||
|
// See Also: SetParseThreadPriority, CWinThread::GetThreadPriority
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual int GetParseThreadPriority();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Set priority for a working thread.
|
||
|
// Parameters:
|
||
|
// nPriority - A new working thread priority.
|
||
|
// Returns:
|
||
|
// TRUE if successful, FALSE otherwise.
|
||
|
// See Also:
|
||
|
// GetParseThreadPriority, CWinThread::GetThreadPriority
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual BOOL SetParseThreadPriority(int nPriority);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to get Auto Complete words for active
|
||
|
// text shema.
|
||
|
// Parameters:
|
||
|
// rArTokens - An array to store Auto Complete words.
|
||
|
// bAppend - If this parameter TRUE - array will be appended,
|
||
|
// otherwise previous items will be removed from array.
|
||
|
// Returns:
|
||
|
// TRUE if successful, FALSE otherwise.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual BOOL GetTokensForAutoCompleate(CXTPSyntaxEditLexTokensDefArray& rArTokens, BOOL bAppend);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Returns notification connection.
|
||
|
// Returns:
|
||
|
// CXTPNotifyConnectionPtr pointer.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual CXTPNotifyConnection* GetConnection();
|
||
|
|
||
|
protected:
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
class CXTPSyntaxEditParseThreadParams
|
||
|
{
|
||
|
public:
|
||
|
CXTPSyntaxEditParseThreadParams();
|
||
|
|
||
|
void AddParseZone(const CXTPSyntaxEditTextRegion& rZone);
|
||
|
|
||
|
//---------------------------------
|
||
|
CMutex lockThreadParams;
|
||
|
CXTPSyntaxEditBufferManager* ptrBuffer;
|
||
|
CXTPSyntaxEditInvalidZoneArray arInvalidZones;
|
||
|
CEvent evParseRun;
|
||
|
CEvent evRunWithoutWait;
|
||
|
CEvent evExitThread;
|
||
|
};
|
||
|
|
||
|
virtual CXTPSyntaxEditParseThreadParams* GetParseInThreadParams();
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
virtual void SelfCloseParseThread();
|
||
|
|
||
|
static UINT AFX_CDECL ThreadParseProc(LPVOID);
|
||
|
|
||
|
CCriticalSection m_csParserData;
|
||
|
CWinThread* m_pParseThread;
|
||
|
int m_nParseThreadPriority; // Saved priority to the parse thread
|
||
|
|
||
|
CXTPSyntaxEditParseThreadParams m_PThreadParams;
|
||
|
|
||
|
CXTPSyntaxEditLexTextSchema* m_ptrTextSchema;
|
||
|
|
||
|
typedef CMap<CString, LPCTSTR, CXTPSyntaxEditLexParserSchemaOptions*, CXTPSyntaxEditLexParserSchemaOptions*>
|
||
|
CXTPSyntaxEditLexParserSchemaOptionsMap;
|
||
|
|
||
|
CXTPSyntaxEditLexParserSchemaOptionsMap m_mapSchOptions;
|
||
|
CXTPSyntaxEditLexParserSchemaOptions* m_pSchOptions_default;
|
||
|
|
||
|
CXTPNotifyConnection* m_pConnection;
|
||
|
CXTPNotifySink* m_pSinkMT;
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
virtual void OnParseEvent_NotificationHandler(XTP_NOTIFY_CODE Event,
|
||
|
WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
virtual void GetStrsFromLVArray(CXTPSyntaxEditLexVariant* pLVArray, CStringArray& rArStrs) const;
|
||
|
|
||
|
virtual BOOL ReadSchemaOptions(const CString& strExt,
|
||
|
CXTPSyntaxEditLexTextSchema* pTextSchema,
|
||
|
CXTPSyntaxEditLexParserSchemaOptions* pOpt);
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
private:
|
||
|
void RemoveAllOptions();
|
||
|
|
||
|
};
|
||
|
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
AFX_INLINE const CXTPSyntaxEditTextRegion& CXTPSyntaxEditLexTextSchema::GetUpdatedTextRegion() const {
|
||
|
return m_curInvalidZone;
|
||
|
}
|
||
|
|
||
|
AFX_INLINE CMutex* CXTPSyntaxEditLexTextSchema::GetDataLoker() {
|
||
|
return &m_lockData;
|
||
|
}
|
||
|
|
||
|
AFX_INLINE CMutex* CXTPSyntaxEditLexTextSchema::GetClassSchLoker() {
|
||
|
return &m_lockClassSch;
|
||
|
}
|
||
|
|
||
|
AFX_INLINE CEvent* CXTPSyntaxEditLexTextSchema::GetBreakParsingEvent() {
|
||
|
return &m_evBreakParsing;
|
||
|
}
|
||
|
|
||
|
AFX_INLINE XTP_EDIT_LINECOL CXTPSyntaxEditLexTextBlock::GetPosEndLC(BOOL bMaxIfInvalid)
|
||
|
{
|
||
|
if(!m_PosEndLC.IsValidData()) {
|
||
|
return bMaxIfInvalid ? XTP_EDIT_LINECOL::MAXPOS : XTP_EDIT_LINECOL::MINPOS;
|
||
|
}
|
||
|
return m_PosEndLC;
|
||
|
}
|
||
|
|
||
|
AFX_INLINE DWORD CXTPSyntaxEditLexTextBlock::GetStartTagEndXLC() {
|
||
|
return m_PosStartLC.GetXLC() + m_nStartTagLen;
|
||
|
}
|
||
|
|
||
|
AFX_INLINE DWORD CXTPSyntaxEditLexTextBlock::GetEndTagBeginXLC() {
|
||
|
return m_PosEndLC.GetXLC() - (m_nEndTagXLCLen > 0 ? m_nEndTagXLCLen : 0);
|
||
|
}
|
||
|
|
||
|
AFX_INLINE DWORD CXTPSyntaxEditLexTextBlock::GetEndTagEndXLC() {
|
||
|
return m_PosEndLC.GetXLC() - (m_nEndTagXLCLen < 0 ? m_nEndTagXLCLen : 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
//#pragma warning(pop)
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endif // !defined(__XTPSYNTAXEDITLEXPARSER_H__)
|