mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-06 17:18:17 +02:00
219 lines
6.2 KiB
ObjectPascal
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.
|
|
|