Types/Turtle/set_Defines.ps1

<#
.SYNOPSIS
    Sets the Turtle Path Animation
.DESCRIPTION
    Sets an animation for the Turtle path.
.EXAMPLE
    $t = turtle defines @(
        "<radialGradient id='gradient'>
            <stop offset='33%' stop-color='red' />
            <stop offset='66%' stop-color='green' />
            <stop offset='100%' stop-color='blue' />
        </radialGradient>"
        "<radialGradient id='gradient2'>
            <stop offset='33%' stop-color='blue' />
            <stop offset='66%' stop-color='green' />
            <stop offset='100%' stop-color='red' />
        </radialGradient>"

    ) flower 42 fill 'url("#gradient")' stroke 'url("#gradient2")'
    $t | turtle save ./gradient.svg
.EXAMPLE
    $t = turtle defines @(
        "<radialGradient id='gradient'>
            <stop offset='33%' stop-color='red' />
            <stop offset='66%' stop-color='green' />
            <stop offset='100%' stop-color='blue' />
        </radialGradient>"
        "<radialGradient id='gradient2'>
            <stop offset='33%' stop-color='blue' />
            <stop offset='66%' stop-color='green' />
            <stop offset='100%' stop-color='red' />
        </radialGradient>"
    ) width 100 height 100 teleport 50 50 StarFlower 42 14.4 6 25 fill 'url("#gradient")' stroke 'url("#gradient2")' fillrule evenodd morph @(
        turtle teleport 50 50 StarFlower 42 12 5 30
        turtle teleport 50 50 StarFlower 42 14.4 6 25
        turtle teleport 50 50 StarFlower 42 12 5 30
    ) PathAnimation ( [Ordered]@{
        type = 'rotate' ; values = 0, 360 ;repeatCount = 'indefinite'; dur = "4.2s"
    })
    $t | turtle save ./gradientrotate.svg
#>

param(
# The definition object.
# This may be a string, XML, a dictionary containing defines, or an element
[PSObject]
$Defines
)

$newDefinition = @(foreach ($definition in $Defines) {
    if ($definition -is [Collections.IDictionary]) {
        $definitionCopy = [Ordered]@{} + $definition                
        "<$elementName $(
            @(foreach ($key in $definitionCopy.Keys) {
                if ($key -eq 'Children') { continue }
                " $key='$([Web.HttpUtility]::HtmlAttributeEncode($definitionCopy[$key]))'"
            }) -join ''
        )$()>"

    }
    elseif ($definition -is [string]) {
        $definition
    }    
    elseif ($definition.OuterXml) {
        $definition.OuterXml
    }
    else {
        "$definition"
    }
})

$this | Add-Member -MemberType NoteProperty -Force -Name '.Defines' -Value $newDefinition