Public/Optimize-MarkdownText.ps1
Function Optimize-MarkdownText { <# .SYNOPSIS Converts text to Markdown-optimized format. .DESCRIPTION Converts text to Markdown-optimized format by escaping syntax characters that can be interpreted by Markdown code. .PARAMETER String The text to be converted. .PARAMETER SkipEscapeSyntax Skips processing of individual characters. .PARAMETER SkipReturnCharacters Skips processing of carriage returns. .PARAMETER SkipTabCharacters Skips processing of preceding whitespace. .EXAMPLE Get-Content C:\Path\To\File.ps1 | Optimize-MarkdownText .EXAMPLE Get-Content -Raw C:\Path\To\File.ps1 | Optimize-MarkdownText -SkipReturnCharacters -SkipTabCharacters | clip .EXAMPLE Get-Content -Raw C:\Path\To\File.ps1 | Optimize-MarkdownText -SkipReturnCharacters | %{$_ | Out-File C:\Path\To\File.md -Encoding ascii -Append -Force} #> [CmdletBinding()] PARAM ( [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)] [ValidateNotNullOrEmpty()] $String, [Parameter(Mandatory=$false)] [Switch]$SkipEscapeSyntax, [Parameter(Mandatory=$false)] [Switch]$SkipReturnCharacters, [Parameter(Mandatory=$false)] [Switch]$SkipTabCharacters ) #region BEGIN Block BEGIN { # Locally scope ErrorActionPreference for predictable behavior of Try/Catch blocks inside the function $ErrorActionPreference = 'Stop' # Create output variable $Results = [System.Collections.ArrayList]::new() } #endregion BEGIN Block #region PROCESS Block PROCESS { FOREACH ($Entry in $String) { IF (!$SkipEscapeSyntax) { # Force typecast values to string $Entry = $Entry | %{([String]$_)} # Escape all markdown syntax characters $Entry = $Entry.Replace('\','\\') $Entry = $Entry.Replace('`','\`') $Entry = $Entry.Replace('*','\*') $Entry = $Entry.Replace('_','\_') $Entry = $Entry.Replace('{','\{') $Entry = $Entry.Replace('}','\}') $Entry = $Entry.Replace('[','\[') $Entry = $Entry.Replace(']','\]') $Entry = $Entry.Replace('<','\<') $Entry = $Entry.Replace('>','\>') $Entry = $Entry.Replace('(','\(') $Entry = $Entry.Replace(')','\)') $Entry = $Entry.Replace('#','\#') $Entry = $Entry.Replace('+','\+') $Entry = $Entry.Replace('-','\-') $Entry = $Entry.Replace('.','\.') $Entry = $Entry.Replace('!','\!') $Entry = $Entry.Replace('|','\|') $Entry = $Entry.Replace('=','\=') $Entry = $Entry.Replace('$','\$') } # Escape return characters SWITCH ($SkipReturnCharacters) { $true {$Entry = $Entry.Split("`r`n")} $false {$Entry = $Entry.Replace("`r`n",'<br>')} } # Escape return characters IF (!$SkipTabCharacters) { $Entry = $Entry.TrimStart(" ") $Entry = $Entry.Replace("`t",'(TabChar)') } # Add to results $Results.Add($Entry) | Out-Null } } #endregion PROCESS Block #region END Block END { Return $Results } #endregion END Block } |