Private/ConvertTo-DiffTextLine.ps1
|
#Requires -Version 5.1 function ConvertTo-DiffTextLine { <# .SYNOPSIS ConvertTo-DiffText が返す 1 行(TextDiff.TextLine)を作成する。 .DESCRIPTION Text を渡すと、行全体を 1 つの共通部分の断片にします。Segments を渡すと、その断片をそのまま使用します。 .PARAMETER Gutter 行番号とマーカーの見出し。 .PARAMETER Role 'Removed' / 'Added' / 'Context' / 'Omitted' のいずれか。 .PARAMETER Text 行全体を 1 つの共通部分の断片にする場合の本文。空行も受け取ります。 .PARAMETER Segments 行内の変更箇所で分割した断片(TextDiff.Segment の配列)。省略行では渡しません。 .PARAMETER OmittedCount 省略した行数。Omitted 以外の行では 0。 .OUTPUTS TextDiff.TextLine。[PSCustomObject]@{ Gutter; Role; Segments; OmittedCount } #> [CmdletBinding(DefaultParameterSetName = 'Segments')] [OutputType('TextDiff.TextLine')] param( [Parameter(Mandatory)] [string]$Gutter, [Parameter(Mandatory)] [ValidateSet('Removed', 'Added', 'Context', 'Omitted', IgnoreCase = $false)] [string]$Role, [Parameter(Mandatory, ParameterSetName = 'Text')] [AllowEmptyString()] [string]$Text, [Parameter(ParameterSetName = 'Segments')] [AllowEmptyCollection()] [psobject[]]$Segments = @(), [int]$OmittedCount = 0 ) # 行はこの関数だけで作成する。どの行にも同じ項目を持たせ、Format-Table の列を統一するため。 # 文字列ではなく断片の配列で返すのは、呼び出し側が変更箇所だけ色を変更できるようにするため。 $lineSegments = if ($PSCmdlet.ParameterSetName -ceq 'Text') { [PSCustomObject]@{ PSTypeName = 'TextDiff.Segment'; Text = $Text; Changed = $false } } else { $Segments } return [PSCustomObject]@{ PSTypeName = 'TextDiff.TextLine' Gutter = $Gutter Role = $Role Segments = @($lineSegments) OmittedCount = $OmittedCount } } |