set sep [string repeat - 50]
puts stderr $sep

#display pipeline in alternative color
proc pipeputs {pipeline} {
    puts stdout [a+ purple bold]$pipeline[a+]
}

set data1 d1
set data2 [list a b c]

x/0.= list "
item1
[list $data1]
[list $data2]
$data2
[pwd]
"
puts stdout "7 element list built with x/0.=list \" (multiline) \"   syntax"
puts stdout "x: $x"
puts stdout "len: [llength $x]"
puts stderr $sep

puts stdout "Using linelist to restrict to the intended 5 elements"
out.= = $x |> linelist
puts stdout "out.=  = \$x |> linelist"
puts stdout "out: $out" 
puts stdout "len: [llength $out]"
puts stderr $sep



y.= list "
{[set j aaa]}
{$j etc}
blah
"
puts stdout "y: $y"
puts stderr $sep



puts stdout "building a dict - with some impurities! (pwd)"
puts stdout "Note that the commands in the dict-building string are resolved at pipeline construction time"
puts stdout "To resolve commands at pipeline run-time, we can pass as arguments (see extrakey key), or put them in a script block in the pipeline (see runtimedir key)"
puts stdout "Some alternatives not demonstrated here are to use 'subst' or compose pipelines"

pipeset dictpipe result.= inputdict_with_args,k@keys,p@@k2/patchlevel,etc/@@k4/etc=* "
k1
   {dir {[pwd]}}
k2
   {patchlevel [info patchlevel]}

k3
   {something etc}
k4 
    {
        hmmm well
        etc blah
        dir {[pwd]}
    }
" |> finald,rtkey/@@runtimedir.= {
    #a very impure script block!
    set origdir [pwd]
    set parent [file dirname [pwd]]
    cd $parent
    dict set data runtimedir [pwd]
    cd $origdir
    set data
}  |@@k4/dir> <| extrakey [pwd] anotherkey foo


puts stdout "dictpipe:"
pipeputs $dictpipe
{*}$dictpipe
puts stdout "dict: $finald"
#todo - a function to repack a nested dict into a flat structure (no linefeeds unless a leaf can't be interpreted as a dict)?
# i.e - k4 is constructed as a string - but we may want to discard the stringrep and rebuild it as a pure list/dict
puts stdout "keys: $k"
puts stdout "k2/patchlevel: $p"
puts stdout "k4/etc: $etc"
puts stdout "runtimedir: $rtkey"
puts stdout "result(k4/dir): $result"
puts stderr $sep


puts stdout "script block comment test (using multiple scripts in segment via implicit pipedata mechanism"

pipeset commentpipe normallist.= rawlist/0.= {
#a not terribly useful comment block
#comments
# etc 
#blah
} {inspect -channel stderr -label inspect_no_data $data} {list \
    {
       data
       over here
       etc
    }
} {
#more comments - but we need to pass the pipeline data through here - so 'set data' required at end.
set data
} |> string trim |> linelist |> .=>2 lmap v {string trim $v}

pipeputs $commentpipe
{*}$commentpipe

puts stdout "rawlist:$rawlist"
puts stdout "normallist:$normallist"
puts stderr $sep


pipeset pipe2 alt.= = $rawlist |> .=>1 lrange 0 end
puts stdout "Alternative interpretation of list data"
puts stdout "pipe2:"
pipeputs $pipe2
{*}$pipe2
puts stdout "alt: $alt"

pipeset pipe3 alt.= = $rawlist |> .=>* list
puts stdout "Or.."
puts stdout "pipe3:"
pipeputs $pipe3
{*}$pipe3
puts stdout "alt: $alt"


puts stdout -done-