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}}== |