mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 03:18:05 +02:00
110 lines
2.0 KiB
ObjectPascal
110 lines
2.0 KiB
ObjectPascal
{$mode objfpc}
|
|
{$H+}
|
|
{
|
|
This file is part of Free Pascal build tools
|
|
Copyright (c) 2005 by Michael Van Canneyt
|
|
|
|
Implements string substitutions
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program 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.
|
|
|
|
**********************************************************************}
|
|
unit usubst;
|
|
|
|
interface
|
|
|
|
uses SysUtils,Classes;
|
|
|
|
// Add N=V pair to list.
|
|
Procedure AddToList(List : TStrings; Const N,V : String);
|
|
// Split NV to N/V and call AddToList
|
|
Function AddPair(List : TStrings; Const NV : String) : Boolean;
|
|
// Perform substitutions in S, from List.
|
|
Function DoSubStitutions(List : TStrings; Var S : String) : Integer;
|
|
|
|
implementation
|
|
|
|
Procedure AddToList(List : TStrings; Const N,V : String);
|
|
|
|
var
|
|
I : Integer;
|
|
|
|
begin
|
|
I:=List.IndexOfName(N);
|
|
If (V='') then
|
|
begin
|
|
If (I<>-1) then
|
|
List.Delete(I)
|
|
end
|
|
else
|
|
begin
|
|
If (I=-1) then
|
|
List.Add(N+'='+V)
|
|
else
|
|
List[I]:=N+'='+V;
|
|
end;
|
|
end;
|
|
|
|
Function AddPair(List : TStrings; Const NV : String) : Boolean;
|
|
|
|
Var
|
|
P : Integer;
|
|
N,V : string;
|
|
|
|
begin
|
|
P:=Pos('=',NV);
|
|
Result:=(P<>0);
|
|
If Result then
|
|
begin
|
|
V:=NV;
|
|
N:=Copy(V,1,P-1);
|
|
Delete(V,1,P);
|
|
AddToList(List,N,V);
|
|
end;
|
|
end;
|
|
|
|
Function DoSubstitutions(List : TStrings; Var S : String) : Integer;
|
|
|
|
Var
|
|
N,T : String;
|
|
P : Integer;
|
|
|
|
begin
|
|
Result:=0;
|
|
T:=S;
|
|
S:='';
|
|
P:=Pos('%',T);
|
|
While (P>0) do
|
|
begin
|
|
S:=S+Copy(T,1,P-1);
|
|
Delete(T,1,P);
|
|
If (Length(T)>0) then
|
|
if (T[1]='%') then
|
|
begin
|
|
S:=S+'%';
|
|
Delete(T,1,1);
|
|
end
|
|
else
|
|
begin
|
|
P:=Pos('%',T);
|
|
If (P=0) then
|
|
S:=S+'%'
|
|
else
|
|
begin
|
|
N:=Copy(T,1,P-1);
|
|
Delete(T,1,P);
|
|
S:=S+List.Values[N];
|
|
end;
|
|
end;
|
|
P:=Pos('%',T);
|
|
end;
|
|
S:=S+T;
|
|
end;
|
|
|
|
end.
|