Brace expansion: Difference between revisions

Content added Content deleted
(Added Seed7 example)
Line 3,005: Line 3,005:
;; '("Ited" "Ite" "Itemed" "Iteme" "Italiced" "Italice" "Itized" "Itize" "Iterated" "Iterate")
;; '("Ited" "Ite" "Itemed" "Iteme" "Italiced" "Italice" "Itized" "Itize" "Iterated" "Iterate")
</lang>
</lang>

=={{header|Seed7}}==
<lang seed7>$ include "seed7_05.s7i";

const proc: expandBraces (in string: stri) is func
local
var boolean: escaped is FALSE;
var integer: depth is 0;
var array integer: bracePoints is 0 times 0;
var array integer: bracesToParse is 0 times 0;
var string: prefix is "";
var string: suffix is "";
var string: option is "";
var integer: idx is 0;
begin
for key idx range stri do
case stri[idx] of
when {'\\'}:
escaped := not escaped;
when {'{'}:
incr(depth);
if not escaped and depth = 1 then
bracePoints := [] (idx);
end if;
when {','}:
if not escaped and depth = 1 then
bracePoints &:= idx;
end if;
when {'}'}:
if not escaped and depth = 1 and length(bracePoints) >= 2 then
bracesToParse := bracePoints & [] (idx);
end if;
decr(depth);
end case;
if stri[idx] <> '\\' then
escaped := FALSE;
end if;
end for;
if length(bracesToParse) <> 0 then
prefix := stri[.. pred(bracesToParse[1])];
suffix := stri[succ(bracesToParse[length(bracesToParse)]) ..];
for idx range 1 to pred(length(bracesToParse)) do
option := stri[succ(bracesToParse[idx]) .. pred(bracesToParse[succ(idx)])];
expandBraces(prefix & option & suffix);
end for;
else
writeln(stri);
end if;
end func;

const proc: main is func
local
var string: stri is "";
begin
for stri range [] ("It{{em,alic}iz,erat}e{d,}, please.",
"~/{Downloads,Pictures}/*.{jpg,gif,png}",
"{,{,gotta have{ ,\\, again\\, }}more }cowbell!",
"{}} some }{,{\\\\{ edge, edge} \\,}{ cases, {here} \\\\\\\\\\}") do
writeln;
expandBraces(stri);
end for;
end func;</lang>

{{out}}
<pre>

Itemized, please.
Italicized, please.
Iterated, please.
Itemize, please.
Italicize, please.
Iterate, please.

~/Downloads/*.jpg
~/Pictures/*.jpg
~/Downloads/*.gif
~/Pictures/*.gif
~/Downloads/*.png
~/Pictures/*.png

cowbell!
more cowbell!
gotta have more cowbell!
gotta have\, again\, more cowbell!

{}} some }{,{\\ edge \,}{ cases, {here} \\\\\}
{}} some }{,{\\ edge \,}{ cases, {here} \\\\\}
</pre>


=={{header|Sidef}}==
=={{header|Sidef}}==