Skip to content

Commit

Permalink
colors
Browse files Browse the repository at this point in the history
  • Loading branch information
steve02081504 committed Mar 5, 2024
1 parent d6823e5 commit 75cd921
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 43 deletions.
41 changes: 40 additions & 1 deletion src/HelpShower.ps1
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
param (
[hashtable]$HelpData
)
. $PSScriptRoot/VirtualTerminal.ps1
function Showuseage($Usage) {
$Usage -replace '\-(\w+)', "$($VirtualTerminal.Colors.BrightYellow)-`$1$($VirtualTerminal.Colors.Reset)"`
-replace "'([^']+)'", "$($VirtualTerminal.Colors.BrightMagenta)'`$1'$($VirtualTerminal.Colors.Reset)"`
-replace '(\w+)=', "$($VirtualTerminal.Colors.BrightGreen)`$1$($VirtualTerminal.Colors.Reset)="`
-replace '\[([a-zA-Z]+)', "[$($VirtualTerminal.Colors.BrightGreen)`$1$($VirtualTerminal.Colors.Reset)"`
}
function ShowParamsHelp($ParamsHelpData) {
# 对于所有的键
$MaxKeyLength = $ParamsHelpData.Keys.Length | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum
Expand All @@ -9,9 +16,41 @@ function ShowParamsHelp($ParamsHelpData) {
$Key = $_
$Value = $ParamsHelpData[$Key]

# 在Vlaue中寻找``包裹的内容,对其进行色彩化
while ($Value -match '`(?<coloringstr>[^\`]+)`') {
$str = $Matches['coloringstr']
$newstr = $str
$color = $VirtualTerminal.Colors.BrightBlue
if(($str.StartsWith('"') -and $str.EndsWith('"')) -or ($str.StartsWith("'") -and $str.EndsWith("'"))) {
# 字符串,淡紫色渲染
$color = $VirtualTerminal.Colors.BrightMagenta
}
elseif ($str.IndexOf('::') -ge 0) {
$newstr = $str.Replace('::', "$($VirtualTerminal.ResetAll)::$($VirtualTerminal.Colors.BrightYellow)")
}
elseif ($str.StartsWith('-') -or $ParamsHelpData.Keys -ccontains $str) {
# 选项,淡黄色渲染
$color = $VirtualTerminal.Colors.BrightYellow
}
elseif ($str.IndexOf('://') -ge 0) {
# URL,淡蓝色渲染+下划线
$color += $VirtualTerminal.Styles.Underline
}
elseif($str -match '^%\w+%$') {
# 环境变量,绿色渲染
$color = $VirtualTerminal.Colors.BrightGreen
}
elseif(Get-Command $str -ErrorAction Ignore) {
# 命令,黄色渲染
$color = $VirtualTerminal.Colors.BrightYellow
}
$Value = $Value.Replace("``$str``", "$color$newstr$($VirtualTerminal.ResetAll)")
}

$Spaces = ' ' * ($MaxKeyLength - $Key.Length)
"$Key$Spaces : $Value"
"$($VirtualTerminal.Colors.BrightYellow)$Key$Spaces$($VirtualTerminal.Colors.Reset) : $Value"
}
}
$HelpData.title
Showuseage $HelpData.Usage
ShowParamsHelp $HelpData.PrarmsData
61 changes: 61 additions & 0 deletions src/VirtualTerminal.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# 代码截取并修改自esh,所有权和许可证由esh项目保留
if ($Host.UI.SupportsVirtualTerminal) {
function Escape { [char]27 + '[' + $args }
$VirtualTerminal = @{
Escape = Escape
Colors = @{
Black = Escape '30m'
Red = Escape '31m'
Green = Escape '32m'
Yellow = Escape '33m'
Blue = Escape '34m'
Magenta = Escape '35m'
Cyan = Escape '36m'
White = Escape '37m'
Default = Escape '39m'
BrightBlack = Escape '90m'
BrightRed = Escape '91m'
BrightGreen = Escape '92m'
BrightYellow = Escape '93m'
BrightBlue = Escape '94m'
BrightMagenta = Escape '95m'
BrightCyan = Escape '96m'
BrightWhite = Escape '97m'
Reset = Escape '39m'
}
Styles = @{
Italic = Escape '3m'
Underline = Escape '4m'
Blink = Escape '5m'
Reverse = Escape '7m'
Hide = Escape '8m'
NoItalic = Escape '23m'
NoUnderline = Escape '24m'
NoBlink = Escape '25m'
NoReverse = Escape '27m'
NoHide = Escape '28m'
Reset = Escape '23m'
}
ResetAll = Escape '0m'
ResetColors = Escape '39m'
ResetStyles = Escape '23m'

#保存当前光标位置
SaveCursor = Escape 's'
#恢复光标位置
RestoreCursor = Escape 'u'
#清除从光标到行尾的内容
ClearLine = Escape 'K'
#清除从光标到行首的内容
ClearLineLeft = Escape '1K'
#清除整行
ClearLineAll = Escape '2K'
#清除从光标到屏幕底部的内容
ClearScreenDown = Escape 'J'
#清除从屏幕顶部到光标的内容
ClearScreenUp = Escape '1J'
#清除整屏
ClearScreenAll = Escape '2J'
}
Remove-Item function:Escape
}
28 changes: 14 additions & 14 deletions src/locale/en-UK.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
CfgFileLabelHead = "Configuration file, my good sir:"
# Console
GUIHelpData = @{
title = "Usage:
ps12exeGUI [[-ConfingFile] '<filename>'] [-Localize '<languagecode>'] [-UIMode 'Dark'|'Light'|'Auto'] [-help]"
title = "Usage:"
Usage = "ps12exeGUI [[-ConfingFile] '<filename>'] [-Localize '<languagecode>'] [-UIMode 'Dark'|'Light'|'Auto'] [-help]"
PrarmsData = [ordered]@{
ConfingFile = "The configuration file to load."
Localize = "The language code to use."
Expand All @@ -22,39 +22,39 @@ ps12exeGUI [[-ConfingFile] '<filename>'] [-Localize '<languagecode>'] [-UIMode '
}
}
ConsoleHelpData = @{
title = "Usage:
[input |] ps12exe [[-inputFile] '<filename|url>' | -Content '<script>'] [-outputFile '<filename>']
title = "Usage:"
Usage = "[input |] ps12exe [[-inputFile] '<filename|url>' | -Content '<script>'] [-outputFile '<filename>']
[-CompilerOptions '<options>'] [-TempDir '<directory>'] [-minifyer '<scriptblock>'] [-noConsole]
[-architecture 'x86'|'x64'] [-threadingModel 'STA'|'MTA'] [-prepareDebug] [-lcid <lcid>]
[-resourceParams @{iconFile='<filename|url>'; title='<title>'; description='<description>'; company='<company>';
product='<product>'; copyright='<copyright>'; trademark='<trademark>'; version='<version>'}]
[-UNICODEEncoding] [-credentialGUI] [-configFile] [-noOutput] [-noError] [-noVisualStyles] [-exitOnCancel]
[-DPIAware] [-winFormsDPIAware] [-requireAdmin] [-supportOS] [-virtualize] [-longPaths]"
PrarmsData = [ordered]@{
input = "String of the contents of the powershell script file, same as -Content."
input = "String of the contents of the powershell script file, same as ``-Content``."
inputFile = "Powershell script file path or url that you want to convert to executable (file has to be UTF8 or UTF16 encoded)"
Content = "Powershell script content that you want to convert to executable"
outputFile = "destination executable file name or folder, defaults to inputFile with extension '.exe'"
CompilerOptions = "additional compiler options (see https://msdn.microsoft.com/en-us/library/78f4aasd.aspx)"
TempDir = "directory for storing temporary files (default is random generated temp directory in %temp%)"
outputFile = "destination executable file name or folder, defaults to inputFile with extension ``'.exe'``"
CompilerOptions = "additional compiler options (see ``https://msdn.microsoft.com/en-us/library/78f4aasd.aspx``)"
TempDir = "directory for storing temporary files (default is random generated temp directory in ``%temp%``)"
minifyer = "scriptblock to minify the script before compiling"
lcid = "location ID for the compiled executable. Current user culture if not specified"
prepareDebug = "create helpful information for debugging"
architecture = "compile for specific runtime only. Possible values are 'x64' and 'x86' and 'anycpu'"
threadingModel = "'Single Thread Apartment' or 'Multi Thread Apartment' mode"
architecture = "compile for specific runtime only. Possible values are ``'x64'`` and ``'x86'`` and ``'anycpu'``"
threadingModel = "``'Single Thread Apartment'`` or ``'Multi Thread Apartment'`` mode"
noConsole = "the resulting executable will be a Windows Forms app without a console window"
UNICODEEncoding = "encode output as UNICODE in console mode"
credentialGUI = "use GUI for prompting credentials in console mode"
resourceParams = "A hashtable that contains resource parameters for the compiled executable"
configFile = "write a config file (<outputfile>.exe.config)"
configFile = "write a config file (``<outputfile>.exe.config``)"
noOutput = "the resulting executable will generate no standard output (includes verbose and information channel)"
noError = "the resulting executable will generate no error output (includes warning and debug channel)"
noVisualStyles = "disable visual styles for a generated windows GUI application (only with -noConsole)"
exitOnCancel = "exits program when Cancel or ""X"" is selected in a Read-Host input box (only with -noConsole)"
noVisualStyles = "disable visual styles for a generated windows GUI application (only with ``-noConsole``)"
exitOnCancel = "exits program when ``Cancel`` or ``""X""`` is selected in a ``Read-Host`` input box (only with ``-noConsole``)"
DPIAware = "if display scaling is activated, GUI controls will be scaled if possible"
winFormsDPIAware = "if display scaling is activated, WinForms use DPI scaling (requires Windows 10 and .Net 4.7 or up)"
requireAdmin = "if UAC is enabled, compiled executable run only in elevated context (UAC dialog appears if required)"
supportOS = "use functions of newest Windows versions (execute [Environment]::OSVersion to see the difference)"
supportOS = "use functions of newest Windows versions (execute ``[Environment]::OSVersion`` to see the difference)"
virtualize = "application virtualization is activated (forcing x86 runtime)"
longPaths = "enable long paths ( > 260 characters) if enabled on OS (works only with Windows 10 or up)"
}
Expand Down
28 changes: 14 additions & 14 deletions src/locale/es-ES.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
CfgFileLabelHead = "Archivo de configuración:"
# Console
GUIHelpData = @{
title = "Uso:
ps12exeGUI [[-ConfingFile] '<archivo de configuración>'] [-Localize '<código de idioma>'] [-UIMode 'Dark'|'Light'|'Auto'] [-help]"
title = "Uso:"
Usage = "ps12exeGUI [[-ConfingFile] '<archivo de configuración>'] [-Localize '<código de idioma>'] [-UIMode 'Dark'|'Light'|'Auto'] [-help]"
PrarmsData = [ordered]@{
ConfingFile = "El archivo de configuración que desea cargar."
Localize = "El código de idioma que desea usar."
Expand All @@ -22,39 +22,39 @@ ps12exeGUI [[-ConfingFile] '<archivo de configuración>'] [-Localize '<código d
}
}
ConsoleHelpData = @{
title = "Uso:
[input |] ps12exe [[-inputFile] '<nombre de archivo|url>' | -Content '<script>'] [-outputFile '<nombre de archivo>']
title = "Uso:"
Usage = "[input |] ps12exe [[-inputFile] '<nombre de archivo|url>' | -Content '<script>'] [-outputFile '<nombre de archivo>']
[-CompilerOptions '<opciones>'] [-TempDir '<carpeta>'] [-minifyer '<scriptblock>'] [-noConsole]
[-architecture 'x86'|'x64'] [-threadingModel 'STA'|'MTA'] [-prepareDebug] [-lcid <lcid>]
[-resourceParams @{iconFile='<nombre de archivo|url>'; title='<título>'; description='<descripción>'; company='<compañía>';
product='<producto>'; copyright='<derechos de autor>'; trademark='<marca>'; version='<versión>'}]
[-UNICODEEncoding] [-credentialGUI] [-configFile] [-noOutput] [-noError] [-noVisualStyles] [-exitOnCancel]
[-DPIAware] [-winFormsDPIAware] [-requireAdmin] [-supportOS] [-virtualize] [-longPaths]"
PrarmsData = [ordered]@{
input = "La cadena del contenido del archivo de script de PowerShell, igual que -Content."
input = "La cadena del contenido del archivo de script de PowerShell, igual que ``-Content``."
inputFile = "La ruta o URL del archivo de script de PowerShell que desea convertir en un archivo ejecutable (el archivo debe estar codificado en UTF8 o UTF16)"
Content = "El contenido del script de PowerShell que desea convertir en un archivo ejecutable"
outputFile = "El nombre del archivo o carpeta de destino, por defecto es el inputFile con la extensión '.exe'"
CompilerOptions = "Opciones adicionales del compilador (ver https://msdn.microsoft.com/en-us/library/78f4aasd.aspx)"
TempDir = "El directorio donde se almacenan los archivos temporales (por defecto es un directorio temporal generado aleatoriamente en %temp%)"
outputFile = "El nombre del archivo o carpeta de destino, por defecto es el inputFile con la extensión ``'.exe'``"
CompilerOptions = "Opciones adicionales del compilador (ver ``https://msdn.microsoft.com/en-us/library/78f4aasd.aspx``)"
TempDir = "El directorio donde se almacenan los archivos temporales (por defecto es un directorio temporal generado aleatoriamente en ``%temp%``)"
minifyer = "Un bloque de script que reduce el tamaño del script antes de la compilación"
lcid = "El identificador de ubicación del archivo ejecutable compilado. Si no se especifica, será la cultura del usuario actual"
prepareDebug = "Crear información que ayude a la depuración"
architecture = "Compilar sólo para un tiempo de ejecución específico. Los valores posibles son 'x64', 'x86' y 'anycpu'"
threadingModel = "Modo 'apartamento de un solo hilo' o 'apartamento de varios hilos'"
architecture = "Compilar sólo para un tiempo de ejecución específico. Los valores posibles son ``'x64'``, ``'x86'`` y ``'anycpu'``"
threadingModel = "Modo ``'apartamento de un solo hilo'`` o ``'apartamento de varios hilos'``"
noConsole = "El archivo ejecutable generado será una aplicación de Windows Forms sin ventana de consola"
UNICODEEncoding = "Codificar la salida como UNICODE en el modo de consola"
credentialGUI = "Usar un GUI para solicitar credenciales en el modo de consola"
resourceParams = "Una tabla hash que contiene los parámetros de recursos del archivo ejecutable compilado"
configFile = "Escribir un archivo de configuración (<outputfile>.exe.config)"
configFile = "Escribir un archivo de configuración (``<outputfile>.exe.config``)"
noOutput = "El archivo ejecutable generado no producirá salida estándar (incluyendo los canales detallado e informativo)"
noError = "El archivo ejecutable generado no producirá salida de error (incluyendo los canales de advertencia y depuración)"
noVisualStyles = "Desactivar los estilos visuales de la aplicación GUI de Windows generada (sólo se usa con -noConsole)"
exitOnCancel = 'Salir del programa cuando se elija Cancelar o "X" en el cuadro de entrada de Read-Host (sólo se usa con -noConsole)'
noVisualStyles = "Desactivar los estilos visuales de la aplicación GUI de Windows generada (sólo se usa con ``-noConsole``)"
exitOnCancel = 'Salir del programa cuando se elija `Cancelar` o `"X"` en el cuadro de entrada de `Read-Host` (sólo se usa con `-noConsole`)'
DPIAware = "Si se habilita el escalado de pantalla, los controles GUI se escalarán lo más posible"
winFormsDPIAware = "Si se habilita el escalado de pantalla, WinForms usará el escalado DPI (requiere Windows 10 y .Net 4.7 o superior)"
requireAdmin = "Si se habilita el UAC, el archivo ejecutable compilado sólo se podrá ejecutar en un contexto elevado (si es necesario, aparecerá el cuadro de diálogo del UAC)"
supportOS = "Usar las características de las últimas versiones de Windows (ejecutar [Environment]::OSVersion para ver las diferencias)"
supportOS = "Usar las características de las últimas versiones de Windows (ejecutar ``[Environment]::OSVersion`` para ver las diferencias)"
virtualize = "Se ha activado la virtualización de aplicaciones (se fuerza el tiempo de ejecución x86)"
longPaths = "Habilitar las rutas largas (> 260 caracteres) si están habilitadas en el sistema operativo (sólo para Windows 10 o superior)"
}
Expand Down
Loading

0 comments on commit 75cd921

Please sign in to comment.