Commands/Save-Turtle.ps1
function Save-Turtle { <# .SYNOPSIS Saves a turtle. .DESCRIPTION Saves a turtle graphics pattern to a file. .EXAMPLE New-Turtle | Move-Turtle SierpinskiTriangle 20 3 | Save-Turtle "./SierpinskiTriangle.svg" .EXAMPLE Move-Turtle BoxFractal 15 5 | Set-Turtle Stroke '#4488ff' | Save-Turtle ./BoxFractal.png #> param( # The file path to save the turtle graphics pattern. [Parameter(ValueFromPipelineByPropertyName)] [Alias('Path')] [string] $FilePath, # The property of the turtle to save. [ArgumentCompleter({ param ( $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters ) $turtleType = Get-TypeData -TypeName Turtle $propertyNames = @(foreach ($memberName in $turtleType.Members.Keys) { if ($turtleType.Members[$memberName] -is [System.Management.Automation.Runspaces.ScriptPropertyData]) { $memberName } }) if ($wordToComplete) { return $propertyNames -like "$wordToComplete*" } else { return $propertyNames } })] [string] $Property = 'Symbol', # The turtle input object. [Parameter(ValueFromPipeline)] [Alias('Turtle')] [PSObject] $InputObject ) process { if (-not $inputObject) { return } switch -regex ($FilePath) { '\.png$' { if ($Property -eq 'Symbol') { $Property = 'PNG' } } '\.jpe?g$' { if ($Property -eq 'Symbol') { $Property = 'JPEG' } } '\.webp$' { if ($Property -eq 'Symbol') { $Property = 'WEBP' } } } $toExport = $inputObject.$Property if (-not $toExport) { return } $unresolvedPath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($FilePath) $null = New-Item -ItemType File -Force -Path $unresolvedPath if ($toExport -is [xml]) { $toExport.Save("$unresolvedPath") } elseif ($toExport -is [byte[]]) { Set-Content -Path $unresolvedPath -Value $toExport -AsByteStream } else { $toExport > $unresolvedPath } if ($?) { Get-Item -Path $unresolvedPath } } } |