Public/ConvertTo-MarkdownBlockQuote.ps1
Function ConvertTo-MarkdownBlockQuote { <# .SYNOPSIS Converts strings to Markdown block quotes. .DESCRIPTION Converts strings to Markdown block quotes by inserting the proper syntax at the beginning of the string. .PARAMETER String The text to convert. .PARAMETER Level The level of indentation for quotes. .PARAMETER AsBlock Skips processing of carriage returns. By default, multi-line strings will be split and processed as separate items. .EXAMPLE ConvertTo-MarkdownBlockQuote "Test1","Test2","Test3" .EXAMPLE ConvertTo-MarkdownBlockQuote "Test1","Test2","Test3" -Level 2 .EXAMPLE $Text = "Loremipsum Loremipsum Loremipsum Loremipsum Loremipsum Loremipsum " ConvertTo-MarkdownBlockQuote $Text,"Test1","Test2" -AsBlock .EXAMPLE $Text = "Loremipsum Loremipsum Loremipsum Loremipsum Loremipsum Loremipsum " ConvertTo-MarkdownBlockQuote $Text,"Test1","Test2" .EXAMPLE ($Text | ConvertTo-MarkdownBlockQuote) | %{"`n$_`n" | Out-File C:\Path\To\My\File.md -Encoding ASCII -Append -Force} #> [CmdletBinding()] PARAM ( [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)] [ValidateNotNullOrEmpty()] [String[]]$String, [Parameter(Mandatory=$false, Position=1, ValueFromPipeline=$false)] [ValidateRange(1,10)] [Int]$Level = 1, [Parameter(Mandatory=$false)] [Switch]$AsBlock ) #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() # Declare variables $MarkdownString = ">" } #endregion BEGIN Block #region PROCESS Block PROCESS { FOREACH ($Entry in $String) { # Trim carriage returns and join $Entry = SWITCH ($AsBlock) { $true {$Entry.Split("`r`n").TrimEnd(" ").TrimStart(" ").TrimStart("`t") -join "<br>"} $false {$Entry.Split("`r`n").TrimEnd(" ").TrimStart(" ").TrimStart("`t")} } # Only make changes if the string doesn't begin with markdown syntax IF ($Entry -notmatch "^$MarkdownString") { # Insert Markdown syntax into $Entry based on $Level $Entry = $Entry | %{($_).Insert(0, "$MarkdownString ")} # Insert additional syntax if indent level greater than 1 is specified IF ($Level -gt 1) { $Entry = $Entry | %{($_).Insert(0, $($MarkdownString * ($Level - 1)))} } } # Add to results $Results.Add($Entry) | Out-Null } } #endregion PROCESS Block #region END Block END { Return $Results } #endregion END Block } |