Private/Get-Color.ps1
function ConvertFrom-RGBColor { [OutputType([System.String])] param( [AllowEmptyString()] [parameter(Mandatory)] [string]$RGB ) if (!$RGB) { return "" } $RGB = $RGB.Replace('#', '') $r = [convert]::ToInt32($RGB.SubString(0,2), 16) $g = [convert]::ToInt32($RGB.SubString(2,2), 16) $b = [convert]::ToInt32($RGB.SubString(4,2), 16) $escape = [char]27 return "${escape}[38;2;$r;$g;$b`m" } function Get-Color{ param( [Parameter(Mandatory = $true)] $fileSystemInfo, [Parameter(Mandatory = $true)] [hashtable]$colorTheme ) $colorHex = Get-ColorHex -fileSystemInfo $fileSystemInfo -colorTheme $colorTheme return ConvertFrom-RGBColor -RGB ($colorHex) } # Following are internal methods function Get-ColorHex{ param( [Parameter(Mandatory = $true)] $fileSystemInfo, [Parameter(Mandatory = $true)] [hashtable]$colorTheme ) $isDirectory = Get-IsDirectory -fileSystemInfo $fileSystemInfo $name = $fileSystemInfo.name $fileExt = Get-FileExtension -fileName $fileSystemInfo.FullName if($isDirectory){ $colorHex = Get-FolderColorHex -name $name -colorTheme $colorTheme }else{ $colorHex = Get-FileColorHex -name $name -fileExt $fileExt -colorTheme $colorTheme } return $colorHex } function Get-FolderColorHex{ param( [Parameter(Mandatory = $true)] [string]$name, [Parameter(Mandatory = $true)] [hashtable]$colorTheme ) $colorHex = $colorTheme.Types.Directories.WellKnown[$name] if($null -eq $colorHex){ $colorHex = $colorTheme.Types.Directories[''] } return $colorHex } function Get-FileColorHex{ param( [Parameter(Mandatory = $true)] [string]$name, [Parameter(Mandatory = $true)] [AllowEmptyString()] [string]$fileExt, [Parameter(Mandatory = $true)] [hashtable]$colorTheme ) $colorHex = $colorTheme.Types.Files.WellKnown[$name] if($null -eq $colorHex){ $colorHex = $colorTheme.Types.Files[$fileExt] } if($null -eq $colorHex){ $colorHex = $colorTheme.Types.Files[''] } return $colorHex } |