RosettaCodeData/Task/Word-wrap/PascalABC.NET/word-wrap.pas

41 lines
1.4 KiB
ObjectPascal

function Wrap(words: sequence of string; lineWidth: integer): sequence of string;
begin
var currentWidth := 0;
foreach var word in words do
begin
if currentWidth <> 0 then
if currentWidth + word.Length < lineWidth then
begin
currentWidth += 1;
yield ' ';
end
else
begin
currentWidth := 0;
yield NewLine;
end;
currentWidth += word.Length;
yield word;
end;
end;
function Wrap(text: string; lineWidth: integer): string
:= Wrap(text.ToWords(' '#13#10),lineWidth).JoinToString('');
begin
var text := '''
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius sapien
vel purus hendrerit vehicula. Integer hendrerit viverra turpis, ac sagittis arcu
pharetra id. Sed dapibus enim non dui posuere sit amet rhoncus tellus
consectetur. Proin blandit lacus vitae nibh tincidunt cursus. Cum sociis natoque
penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam tincidunt
purus at tortor tincidunt et aliquam dui gravida. Nulla consectetur sem vel
felis vulputate et imperdiet orci pharetra. Nam vel tortor nisi. Sed eget porta
tortor. Aliquam suscipit lacus vel odio faucibus tempor. Sed ipsum est,
condimentum eget eleifend ac, ultricies non dui. Integer tempus, nunc sed
venenatis feugiat, augue orci pellentesque risus, nec pretium lacus enim eu
nibh.
''';
Wrap(text,50).Println;
end.