Jump to content

Brace expansion: Difference between revisions

Added Tailspin solution
(Added Tailspin solution)
Line 4,207:
{}} some }{,{\\ edge \,}{ cases, {here} \\\\\}
 
</pre>
 
=={{header|Tailspin}}==
<lang tailspin>
templates braceExpansion
composer braceParse
[ <part|'[{}\\,]'>* ] // This is not simply <production> because there may be unbalanced special chars
rule production: [ <part>* ]
rule part: <alternation|balancedBraces|escapedCharacter|'[^{}\\,]+'>+
rule alternation: (<='{'>) [ <production> <alternate>+ ] (<='}'>)
rule alternate: (<=','>) <production>
rule balancedBraces: <='{'> <part>* <='}'>
rule escapedCharacter: <'\\.'>
end braceParse
 
templates collateSequence
@: [''];
$... -> #
$@!
when <'.*'> do
def part: $;
@: [$@... -> '$;$part;'];
otherwise
def alternates: [ $... -> collateSequence ... ];
@: [$@... -> \(def prefix: $; $alternates... -> '$prefix;$;' ! \)];
end collateSequence
 
$ -> braceParse -> collateSequence !
end braceExpansion
 
'~/{Downloads,Pictures}/*.{jpg,gif,png}' -> '"$;" expands to:$ -> braceExpansion ... -> '$#10;$;';$#10;$#10;' -> !OUT::write
 
'It{{em,alic}iz,erat}e{d,}, please.' -> '"$;" expands to $ -> braceExpansion ... -> '$#10;$;';$#10;$#10;' -> !OUT::write
 
'{,{,gotta have{ ,\, again\, }}more }cowbell!' -> '"$;" expands to $ -> braceExpansion ... -> '$#10;$;';$#10;$#10;' -> !OUT::write
 
'{}} some }{,{\\{ edge, edge} \,}{ cases, {here} \\\\\}' -> '"$;" expands to $ -> braceExpansion ... -> '$#10;$;';$#10;$#10;' -> !OUT::write
</lang>
{{out}}
<pre>
"~/{Downloads,Pictures}/*.{jpg,gif,png}" expands to:
~/Downloads/*.jpg
~/Downloads/*.gif
~/Downloads/*.png
~/Pictures/*.jpg
~/Pictures/*.gif
~/Pictures/*.png
 
"It{{em,alic}iz,erat}e{d,}, please." expands to
Itemized, please.
Itemize, please.
Italicized, please.
Italicize, please.
Iterated, please.
Iterate, please.
 
"{,{,gotta have{ ,\, again\, }}more }cowbell!" expands to
cowbell!
more cowbell!
gotta have more cowbell!
gotta have\, again\, more cowbell!
 
"{}} some }{,{\\{ edge, edge} \,}{ cases, {here} \\\\\}" expands to
{}} some }{,{\\ edge \,}{ cases, {here} \\\\\}
{}} some }{,{\\ edge \,}{ cases, {here} \\\\\}
</pre>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.