Commands/ConvertFrom-Glass.ps1

function ConvertFrom-Glass {
    <#
    .SYNOPSIS
        Converts from Glass
    .DESCRIPTION
        Converts from glass encoded strings to plain text
    .NOTES
        For safety reasons, this generates a PowerShell engine event.
        
        To monitor for this, subscribe to the `ConvertFrom-Glass` event.
    .EXAMPLE
        ConvertTo-Glass "Is it Safe?" |
            ConvertFrom-Glass |
            Where-Object { $_ -eq "Is it Safe?" } |
            ConvertTo-Glass "It's safe. So safe you wouldn't believe it." |
            ConvertFrom-Glass
    .LINK
        Get-Glass
    .LINK
        ConvertTo-Glass
    #>

    [Alias('FromGlass')]
    param()
    $allArgsAndInput = @($input) + $args

    $glassPattern = @(
        '[\s\r\n\t]{0,}'    # Allow leading whitespace
        '[\ufe00-\ufe0f]+'  # Match any unicode character in the selection range
        '[\s\r\n\t]{0,}'    # Allow all trailing whitespace
    ) -join ''

    $glassDetector = [Regex]::new($glassPattern) 


    foreach ($arg in $allArgsAndInput) {        
        "$arg" -replace $glassDetector, {
            $match = $_
            
            $hex = foreach ($char in "$match".ToCharArray()) {
                "{0:x}" -f (
                    ($char -as [int]) - 0xFE00
                )
            }

            $glassString = $outputEncoding.GetString([Convert]::FromHexString($hex -join ''))
            $null = New-Event -SourceIdentifier "ConvertFrom-Glass" -Sender $arg -EventArguments $match, $glassString 
            $glassString
        }                
    }
}