Brace expansion: Difference between revisions
→{{header|TXR}}: Handle all required cases: backslash, braces without commas, dangling braces.
(→{{header|TXR}}: New entry.) |
(→{{header|TXR}}: Handle all required cases: backslash, braces without commas, dangling braces.) |
||
Line 5,159:
str str
;; tokenizer
toks (remqual "" (tok #/([{},]|{}|\\\\|\\.)/ t str)))))
(build
(whilet ((next (pop ctx.toks)))
Line 5,168:
(defun bexp-parse-brace (ctx)
(
(let ((orig-toks ctx.toks))
(caseq (whilet ((next (pop ctx.toks)))
(casequal next
("{" (add (bexp-parse-brace ctx)))
("," (add :))
("}" (return :ok))
(t (add next
((memq : (
(flow (
(split* @1 (op where (op eq :)))
(cons '/)))▼
(mapcar (tc
(((x)) x)
((x) x)))
▲ (cons '/)))
(add "}")
(get))))
(nil
(add* "{")
(subst : "," (get)))))))
;; expander
Line 5,199 ⟶ 5,210:
;; Tests
(
(
(
(
</syntaxhighlight>
{{out}}
<pre>
~/Downloads/*.gif
~/Downloads/*.png
~/Pictures/*.jpg
~/Pictures/*.gif
~/Pictures/*.png
Itemized, please.
Itemize, please.
Italicized, please.
Italicize, please.
▲ "iz")
Iterated, please.
▲ "erat")
Iterate, please.
cowbell!
more cowbell!
gotta have more cowbell!
gotta have\, again\, more cowbell!
{}} some }{,{\\ edge \,}{ cases, {here} \\\\\}
{}} some }{,{\\ edge \,}{ cases, {here} \\\\\}
</pre>
|