lazarus/components/simpleideintf/simpleide.pas
2017-01-29 21:04:32 +00:00

219 lines
6.2 KiB
ObjectPascal

{ 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 <http://www.gnu.org/copyleft/gpl.html>. 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.