src/Providers/Lorem.ps1

# Providers/Lorem.ps1

$script:_LoremWords = @(
    'alias','consequatur','aut','perferendis','sit','voluptatem','accusantium',
    'doloremque','aperiam','eaque','ipsa','quae','ab','illo','inventore','veritatis',
    'et','quasi','architecto','beatae','vitae','dicta','sunt','explicabo','nemo','enim',
    'ipsam','voluptatem','quia','voluptas','sit','aspernatur','aut','odit','aut','fugit',
    'sed','quia','consequuntur','magni','dolores','eos','qui','ratione','voluptatem',
    'sequi','nesciunt','neque','porro','quisquam','est','qui','dolorem','ipsum','quia',
    'dolor','sit','amet','consectetur','adipisci','velit','sed','quia','non','numquam',
    'eius','modi','tempora','incidunt','ut','labore','et','dolore','magnam','aliquam',
    'quaerat','voluptatem','ut','enim','ad','minima','veniam','quis','nostrum',
    'exercitationem','ullam','corporis','suscipit','laboriosam','nisi','ut','aliquid',
    'ex','ea','commodi','consequatur','quis','autem','vel','eum','iure','reprehenderit',
    'qui','in','ea','voluptate','velit','esse','quam','nihil','molestiae','consequatur',
    'vel','illum','qui','dolorem','eum','fugiat','quo','voluptas','nulla','pariatur'
)

function Get-FakeWord {
<#.SYNOPSIS A single lorem word.#>
    [CmdletBinding()] param()
    return Get-FakeRandomElement $script:_LoremWords
}

function Get-FakeWords {
<#.SYNOPSIS $Nb lorem words as array or joined string.#>
    [CmdletBinding()]
    param(
        [Parameter()] [int]  $Nb     = 3,
        [Parameter()] [bool] $AsText = $false
    )
    $arr = @(1..$Nb | ForEach-Object { Get-FakeWord })
    if ($AsText) { return $arr -join ' ' }
    return $arr
}

function Get-FakeSentence {
<#.SYNOPSIS Sentence of approximately $NbWords words.#>
    [CmdletBinding()]
    param(
        [Parameter()] [int]  $NbWords         = 6,
        [Parameter()] [bool] $VariableNbWords = $true
    )
    $count = if ($VariableNbWords) { [Math]::Max(1, $NbWords + (_Rng).Next(-2, 3)) } else { $NbWords }
    $words = Get-FakeWords -Nb $count
    $sentence = ($words -join ' ')
    return (($sentence.Substring(0,1).ToUpper()) + $sentence.Substring(1)) + '.'
}

function Get-FakeSentences {
<#.SYNOPSIS $Nb sentences as array or joined string.#>
    [CmdletBinding()]
    param(
        [Parameter()] [int]  $Nb     = 3,
        [Parameter()] [bool] $AsText = $false
    )
    $arr = @(1..$Nb | ForEach-Object { Get-FakeSentence })
    if ($AsText) { return $arr -join ' ' }
    return $arr
}

function Get-FakeParagraph {
<#.SYNOPSIS Paragraph of approximately $NbSentences sentences.#>
    [CmdletBinding()]
    param(
        [Parameter()] [int]  $NbSentences         = 3,
        [Parameter()] [bool] $VariableNbSentences = $true
    )
    $count = if ($VariableNbSentences) { [Math]::Max(1, $NbSentences + (_Rng).Next(-1,2)) } else { $NbSentences }
    return Get-FakeSentences -Nb $count -AsText $true
}

function Get-FakeParagraphs {
<#.SYNOPSIS $Nb paragraphs as array or joined string.#>
    [CmdletBinding()]
    param(
        [Parameter()] [int]  $Nb     = 3,
        [Parameter()] [bool] $AsText = $false
    )
    $arr = @(1..$Nb | ForEach-Object { Get-FakeParagraph })
    if ($AsText) { return $arr -join "`n`n" }
    return $arr
}

function Get-FakeText {
<#.SYNOPSIS Lorem text up to $MaxNbChars characters.#>
    [CmdletBinding()]
    param([Parameter()] [int] $MaxNbChars = 200)
    $text = ''
    while ($text.Length -lt $MaxNbChars) {
        $sentence = Get-FakeSentence
        if (($text.Length + $sentence.Length + 1) -le $MaxNbChars) {
            $text += if ($text) { ' ' } else { '' }
            $text += $sentence
        } else { break }
    }
    if ($text -eq '') { $text = (Get-FakeSentence).Substring(0, [Math]::Min($MaxNbChars, (Get-FakeSentence).Length)) }
    return $text.Substring(0, [Math]::Min($MaxNbChars, $text.Length))
}