program project1;
{$mode objfpc}{$H+}
uses
SysUtils;
function CleanedInnerTagsOK(aText: String; out FreeOfInnerTags: String): Boolean;
var
p1, p2: SizeInt;
begin
FreeOfInnerTags := aText;
p1 := Pos('<<', aText);
p2 := Pos('>>', aText);
Result := (p1 > 0) or (p2 > 0);
if Result then
if (p1 > 0) and (p2 > 0) then
FreeOfInnerTags := Copy(aText, 1, p1) + Copy(aText, Succ(p2), MaxInt)
else if (p2 > 0) then
begin
p1 := p2;
while (p1 > 1) and (aText[p1] <> '<') do
Dec(p1);
FreeOfInnerTags := Trim(Copy(aText, 1, Pred(p1))) + Copy(aText, Succ(p2), MaxInt);
end
else
begin
p2 := p1;
while (p2 < Length(aText)) and (aText[p2] <> '>') do
Inc(p2);
FreeOfInnerTags := Copy(aText, 1, p1) + Trim(Copy(aText, Succ(p2), MaxInt));
end;
end;
var
s1: String = 's1 <<5%>> s1'; // '<>'
s2: String = 's2 <rarely <5%>> s2'; // '<rarely>'
s3: String = 's3 <<6%> seldom> s3';
s4: String = 's4 <tag> <tag> other text <tag> s4';
s: String;
begin
WriteLn('CleanedInnerTagsOK(s1, s) is ',CleanedInnerTagsOK(s1, s):5,', s = "',s,'"');
WriteLn('CleanedInnerTagsOK(s2, s) is ',CleanedInnerTagsOK(s2, s):5,', s = "',s,'"');
WriteLn('CleanedInnerTagsOK(s3, s) is ',CleanedInnerTagsOK(s3, s):5,', s = "',s,'"');
WriteLn('CleanedInnerTagsOK(s4, s) is ',CleanedInnerTagsOK(s4, s):5,', s = "',s,'"');
ReadLn;
end.