{ Copyright (C) 2007 Mattias Gaertner 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. Abstract: } unit SimpleIDE; {$mode objfpc}{$H+} interface uses Classes, SysUtils, RegExpr, // LazUtils LazFileUtils, // Codetools FileProcs, // IdeIntf TextTools, IDETextConverter; type { TLazyTextConverterToolClasses } TLazyTextConverterToolClasses = class(TTextConverterToolClasses) public function SupportsType(aTextType: TTextConverterType): boolean; override; function GetTempFilename: string; override; function LoadFromFile(Converter: TIDETextConverter; const AFilename: string; UpdateFromDisk, Revert: Boolean): Boolean; override; function SaveCodeBufferToFile(Converter: TIDETextConverter; const AFilename: string): Boolean; override; function GetCodeBufferSource(Converter: TIDETextConverter; out Source: string): boolean; override; function CreateCodeBuffer(Converter: TIDETextConverter; const Filename, NewSource: string; out CodeBuffer: Pointer): boolean; override; function LoadCodeBufferFromFile(Converter: TIDETextConverter; const Filename: string; UpdateFromDisk, Revert: Boolean; out CodeBuffer: Pointer): boolean; override; end; procedure SetupTextConverters; procedure FreeTextConverters; implementation var SynREEngine: TRegExpr; procedure InitSynREEngine; begin if SynREEngine=nil then SynREEngine:=TRegExpr.Create; end; function SynREMatches(const TheText, RegExpr, ModifierStr: string; StartPos: integer): boolean; begin InitSynREEngine; SynREEngine.ModifierStr:=ModifierStr; SynREEngine.Expression:=RegExpr; SynREEngine.InputString:=TheText; Result:=SynREEngine.ExecPos(StartPos); end; function SynREVar(Index: Integer): string; begin if SynREEngine<>nil then Result:=SynREEngine.Match[Index] else Result:=''; end; procedure SynREVarPos(Index: Integer; out MatchStart, MatchLength: integer); begin if SynREEngine<>nil then begin MatchStart:=SynREEngine.MatchPos[Index]; MatchLength:=SynREEngine.MatchLen[Index]; end else begin MatchStart:=-1; MatchLength:=-1; end; end; function SynREVarCount: Integer; begin if SynREEngine<>nil then Result:=SynREEngine.SubExprMatchCount else Result:=0; end; function SynREReplace(const TheText, FindRegExpr, ReplaceRegExpr: string; UseSubstutition: boolean; const ModifierStr: string): string; begin InitSynREEngine; SynREEngine.ModifierStr:=ModifierStr; SynREEngine.Expression:=FindRegExpr; Result:=SynREEngine.Replace(TheText,ReplaceRegExpr,UseSubstutition); end; procedure SynRESplit(const TheText, SeparatorRegExpr: string; Pieces: TStrings; const ModifierStr: string); begin InitSynREEngine; SynREEngine.ModifierStr:=ModifierStr; SynREEngine.Expression:=SeparatorRegExpr; SynREEngine.Split(TheText,Pieces); end; procedure SetupTextConverters; begin if TextConverterToolClasses<>nil then raise Exception.Create('SimpleIDE: TextConverterToolClasses<>nil'); TextConverterToolClasses:=TLazyTextConverterToolClasses.Create; TextConverterToolClasses.RegisterClass(TTextReplaceTool); end; procedure FreeTextConverters; begin FreeAndNil(TextConverterToolClasses); end; { TLazyTextConverterToolClasses } function TLazyTextConverterToolClasses.SupportsType( aTextType: TTextConverterType): boolean; begin Result:=aTextType in [tctSource,tctFile,tctStrings]; end; function TLazyTextConverterToolClasses.GetTempFilename: string; var BaseDir: String; begin BaseDir:=GetCurrentDirUTF8; Result:=FileProcs.GetTempFilename(BaseDir,'convert_'); end; function TLazyTextConverterToolClasses.LoadFromFile( Converter: TIDETextConverter; const AFilename: string; UpdateFromDisk, Revert: Boolean): Boolean; begin Result:=Converter.LoadFromFile(AFilename,false,UpdateFromDisk,Revert); end; function TLazyTextConverterToolClasses.SaveCodeBufferToFile( Converter: TIDETextConverter; const AFilename: string): Boolean; begin raise Exception.Create('SaveCodeBufferToFile not supported'); if (Converter=nil) and (aFilename='') then; Result:=false; end; function TLazyTextConverterToolClasses.GetCodeBufferSource( Converter: TIDETextConverter; out Source: string): boolean; begin raise Exception.Create('GetCodeBufferSource not supported'); Source:=''; if Converter=nil then; Result:=false; end; function TLazyTextConverterToolClasses.CreateCodeBuffer( Converter: TIDETextConverter; const Filename, NewSource: string; out CodeBuffer: Pointer): boolean; begin raise Exception.Create('CreateCodeBuffer not supported'); CodeBuffer:=nil; if (Converter=nil) and (Filename='') and (NewSource='') then; Result:=false; end; function TLazyTextConverterToolClasses.LoadCodeBufferFromFile( Converter: TIDETextConverter; const Filename: string; UpdateFromDisk, Revert: Boolean; out CodeBuffer: Pointer): boolean; begin raise Exception.Create('LoadCodeBufferFromFile not supported'); CodeBuffer:=nil; if (Converter=nil) and (Filename='') and UpdateFromDisk and Revert then; Result:=false; end; initialization REException:=ERegExpr; REMatchesFunction:=@SynREMatches; REVarFunction:=@SynREVar; REVarPosProcedure:=@SynREVarPos; REVarCountFunction:=@SynREVarCount; REReplaceProcedure:=@SynREReplace; RESplitFunction:=@SynRESplit; SetupTextConverters; finalization FreeTextConverters; FreeAndNil(SynREEngine); end.