Public/ConvertTo-MarkdownFormattedText.ps1

Function ConvertTo-MarkdownFormattedText
{
    <#
        .SYNOPSIS
        Converts strings to Markdown formatted text.
 
        .DESCRIPTION
        Converts strings to Markdown formatted text by inserting the proper syntax at the beginning and end of the string.
 
        .PARAMETER String
        The text to convert.
 
        .PARAMETER Italic
        Italicizes text.
 
        .PARAMETER Bold
        Bolds text.
 
        .PARAMETER Underlined
        Underlines text.
 
        .PARAMETER Strikethrough
        Strikes a line through text.
 
        .PARAMETER Subscript
        Converts text to subscript.
 
        .PARAMETER Superscript
        Converts text to superscript.
 
        .EXAMPLE
        "Test","Test2" | ConvertTo-MarkDownFormattedText -Italic -Bold -Underlined -Strikethrough
 
        .EXAMPLE
        Get-Content -Raw C:\Path\To\Project\Document.txt | ConvertTo-MarkDownFormattedText -Italic -Bold -Underlined
 
    #>


    [CmdletBinding(DefaultParameterSetName="__AllParameterSets")]
    PARAM
    (
        [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)]
        [ValidateNotNullOrEmpty()]
        [String[]]$String,

        [Parameter(Mandatory=$false)]
        [Switch]$Italic,

        [Parameter(Mandatory=$false)]
        [Switch]$Bold,

        [Parameter(Mandatory=$false)]
        [Switch]$Strikethrough,

        [Parameter(Mandatory=$false)]
        [Switch]$Underlined,

        [Parameter(Mandatory=$false, ParameterSetName="Subscript")]
        [Switch]$Subscript,

        [Parameter(Mandatory=$false, ParameterSetName="Superscript")]
        [Switch]$Superscript
    )

    #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)
        {
            # Declare variables
            $SyntaxStart = ''
            $SyntaxEnd   = ''

            # Insert Syntax if is Italic specified
            IF ($Italic)
            {
                $SyntaxStart = "*$SyntaxStart"
                $SyntaxEnd   = "$SyntaxEnd*"
            }

            # Insert Syntax if is Bold specified
            IF ($Bold)
            {
                $SyntaxStart = "**$SyntaxStart"
                $SyntaxEnd   = "$SyntaxEnd**"
            }

            # Insert Syntax if Strikethrough is specified
            IF ($Strikethrough)
            {
                $SyntaxStart = "~~$SyntaxStart"
                $SyntaxEnd   = "$SyntaxEnd~~"
            }

            # Insert Syntax if Underlined is specified
            IF ($Underlined)
            {
                $SyntaxStart = "<u>$SyntaxStart"
                $SyntaxEnd   = "$SyntaxEnd</u>"
            }

            # Insert Syntax if Subscript is specified
            IF ($Subscript)
            {
                $SyntaxStart = "<sub>$SyntaxStart"
                $SyntaxEnd   = "$SyntaxEnd</sub>"
            }

            # Insert Syntax if Superscript is specified
            IF ($Superscript)
            {
                $SyntaxStart = "<sup>$SyntaxStart"
                $SyntaxEnd   = "$SyntaxEnd</sup>"
            }

            # Insert Markdown syntax into $Entry
            $Entry = "$SyntaxStart$Entry$SyntaxEnd"

            # Add to results
            $Results.Add($Entry) | Out-Null
        }
    }
    #endregion PROCESS Block

    #region END Block
    END
    {
        Return $Results
    }
    #endregion END Block
}