{ *************************************************************************** * * * This source is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This code 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 * * General Public License for more details. * * * * A copy of the GNU General Public License is available on the World * * Wide Web at . You can also * * obtain it by writing to the Free Software Foundation, * * Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. * * * *************************************************************************** Author: Mattias Gaertner Abstract: TMultiKeyWordListCodeTool enhances the TCustomCodeTool with the ability to switch the KeyWord list and keep a list of KeyWord lists. } unit MultiKeyWordListTool; {$ifdef FPC}{$mode objfpc}{$endif}{$H+} interface {$I codetools.inc} uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} Classes, SysUtils, FileProcs, CustomCodeTool, KeywordFuncLists; type { TMultiKeyWordListCodeTool } TMultiKeyWordListCodeTool = class(TCustomCodeTool) private FKeyWordLists: TFPList; // list of TKeyWordFunctionList FCurKeyWordListID: integer; function GetKeyWordFuncList: TKeyWordFunctionList; procedure SetCurKeyWordFuncList(AKeyWordFuncList: TKeyWordFunctionList); protected procedure SetKeyWordListID(NewID: integer); public DefaultKeyWordFuncList: TKeyWordFunctionList; property KeyWordListID: integer read FCurKeyWordListID write SetKeyWordListID; property CurKeyWordFuncList: TKeyWordFunctionList read GetKeyWordFuncList write SetCurKeyWordFuncList; function AddKeyWordFuncList(AKeyWordFuncList: TKeyWordFunctionList): integer; procedure ClearKeyWordFuncLists; constructor Create; destructor Destroy; override; procedure CalcMemSize(Stats: TCTMemStats); override; end; implementation { TMultiKeyWordListCodeTool } constructor TMultiKeyWordListCodeTool.Create; begin inherited Create; FKeyWordLists:=TFPList.Create; // list of TKeyWordFunctionList AddKeyWordFuncList(KeyWordFuncList); FCurKeyWordListID:=0; DefaultKeyWordFuncList:=KeyWordFuncList; end; destructor TMultiKeyWordListCodeTool.Destroy; begin ClearKeyWordFuncLists; FKeyWordLists.Free; inherited Destroy; end; procedure TMultiKeyWordListCodeTool.CalcMemSize(Stats: TCTMemStats); begin inherited CalcMemSize(Stats); Stats.Add('TMultiKeyWordListCodeTool', PtrUInt(FKeyWordLists.InstanceSize) +PtrUInt(FKeyWordLists.Capacity)*SizeOf(Pointer)); end; procedure TMultiKeyWordListCodeTool.SetKeyWordListID(NewID: integer); begin if FCurKeyWordListID=NewID then exit; FCurKeyWordListID:=NewID; KeyWordFuncList:=TKeyWordFunctionList(FKeyWordLists[NewID]); end; procedure TMultiKeyWordListCodeTool.SetCurKeyWordFuncList( AKeyWordFuncList: TKeyWordFunctionList); var i: integer; begin i:=0; while i