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
}