link strings link weaving procedure pfl2str(pattern) local result, expr1, expr2, op static symbols, optbl initial { symbols := '[]*`~Ð><+|#:!' optbl := table() optbl["*"] := repl optbl["`"] := reverse optbl["#"] := rotate optbl["<"] := Upto optbl[">"] := Downto optbl["Ð"] := UpDownto optbl["|"] := PatternPalindrome optbl["!"] := Palindrome optbl["+"] := Block optbl["~"] := Collate optbl["Ð>"] := Extend optbl["~"] := Interleave optbl[":"] := Template optbl["?"] := Permute optbl["%"] := Pbox optbl["><"] := UpDown optbl["<>"] := DownUp } result := "" pattern ? { while result ||:= tab(upto('[')) do { move(1) expr1 := pfl2str(tab(bal(symbols, '[', ']'))) | error() op := tab(many(symbols)) | error() expr2 := pfl2str(tab(bal(']', '[', ']'))) | error() result ||:= \optbl[op](expr1, expr2) | error() move(1) } if not pos(0) then result ||:= tab(0) } return result end