private/convertToMermaidPie.ps1

function ConvertTo-MermaidPieTotalAndPositive{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory,ValueFromPipelineByPropertyName)][string]$Title,
        [Parameter(Mandatory,ValueFromPipelineByPropertyName)][string]$Name,
        [Parameter(Mandatory,ValueFromPipelineByPropertyName)][int64]$Total,
        [Parameter(Mandatory,ValueFromPipelineByPropertyName)][int64]$Positive
    )
    process{

        $data = [ordered]@{
            "$Name" = $Positive
            "Not $Name" = $($Total - $Positive)
        }
        $mermaid = ConvertTo-MermaidPie -Title $Title -Data $data

        return $mermaid
    }
}

function ConvertTo-MermmaidPieTopPercentage{
    [CmdletBinding()]
    param(
        # Hash table of data to convert to pie chart.
        [Parameter(Mandatory,ValueFromPipeline)][hashtable]$Data,
        # Attribute name to use for sorting.
        [Parameter(Mandatory)][string]$TargetAttribute,
        # top percentage to show.
        [Parameter()][int]$TopPercentage = 75
    )

    process{
        $languages = @{}

        $calcsByLanguage.GetEnumerator() | ForEach-Object {
            $languages[$_.Name] = $_.Value.$TargetAttribute.total
        }
        $data = $languages | Select-Top $TopPercentage | Format-HashTablesByValue

        $total = $languages.Values | Measure-Object -Sum | Select-Object -ExpandProperty Sum

        $title = "$TargetAttribute [$total]"

        $mermaid += ConvertTo-MermaidPie -Title $title -Data $data

        return $mermaid
    }
}


function ConvertTo-MermaidPie{
    [CmdletBinding()]
    [OutputType([string])]
    param(
        [Parameter(Mandatory)][string]$Title,
        [Parameter(Mandatory)]$Data
    )

    $mermaid =@()
    $mermaid += "pie showData"
    $mermaid += " title $Title"

    $Data.GetEnumerator() | ForEach-Object {
        $mermaid += " `"$($_.Key)`": $($Data.$($_.Key))"
    }

    $ret = $mermaid | Out-String

    return $ret
}

function Convert-MermaidToMarkdown{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory,ValueFromPipeline)][string]$Mermaid
    )

    process {
        $markdown = @()

        $markdown += '``` mermaid'
        $markdown += $mermaid
        $markdown += '```'

        return $markdown | Out-String
    }
}