123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- {$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.
|