public/Show-GlyThemeColor.ps1
|
function Show-GlyThemeColor { [CmdletBinding(DefaultParameterSetName = 'Selected')] param( [Parameter(ParameterSetName = 'Selected', Position = 0)] [Alias('Name')] [string] $Theme = $script:GlyConfiguration.Theme, [Parameter(Mandatory, ParameterSetName = 'All')] [switch] $All ) $selectedThemes = if ($All) { @(Get-GlyTheme) } else { @(Get-GlyTheme -Name $Theme) } $rows = foreach ($selectedTheme in $selectedThemes) { $styles = [ordered]@{} $entries = @( [pscustomobject]@{ Matcher = 'Default' Sample = ConvertTo-GlyPreviewName Style = $selectedTheme.Default } foreach ($rule in $selectedTheme.Rules) { [pscustomobject]@{ Matcher = ConvertTo-GlyMatcherLabel -Selector $rule.Selector Sample = ConvertTo-GlyPreviewName -Selector $rule.Selector Style = $rule.Style } } ) foreach ($entry in $entries) { $style = $entry.Style $signature = @( $style.Foreground, $style.Background, $style.Bold, $style.Italic, $style.Underline ) -join '|' if ($styles.Contains($signature)) { $styles[$signature].Matchers += $entry.Matcher $styles[$signature].Samples += $entry.Sample } else { $styles[$signature] = [pscustomobject]@{ Matchers = @($entry.Matcher) Samples = @($entry.Sample) Style = $style } } } foreach ($entry in $styles.Values) { [pscustomobject] [ordered]@{ PSTypeName = 'gly.ThemeColorPreview' Theme = $selectedTheme.Name Matcher = $entry.Matchers -join ', ' Color = ConvertTo-GlyStyleLabel -Style $entry.Style Preview = ConvertTo-GlyPreviewText -Text ($entry.Samples -join ', ') -Style $entry.Style } } } return $rows } |