Brace expansion: Difference between revisions
Content added Content deleted
(Added Tailspin solution) |
|||
Line 4,207: | Line 4,207: | ||
{}} some }{,{\\ edge \,}{ cases, {here} \\\\\} |
{}} 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> |
</pre> |
||