%s%s` $icon $name $rest }}
{{- end }}
{{- end }}
{{- if $replacement }}
{{- $content = replace $content (index . 0) $replacement }}
{{- end }}
{{- end }}
{{- $content | safeHTML -}}
{{- define "partials/inline/tree2markdown" }}
{{- /* this parses native `tree` output into a Markdown list */}}
{{- $content := . }}
{{- $indentChars := slice " " "\t" }}
{{- $treeColChars := slice "│" "├" "└" "─" }}
{{- $indentPattern := "" }}
{{- $treeColPattern := "" }}
{{- $treeColPatternLen := 0 }}
{{- $firstLine := true }}
{{- $lines := split $content "\n" }}
{{- range $lineIndex, $line := $lines }}
{{- /* the first text line and all empty lines are skipped */}}
{{- $skipLine := false }}
{{- if not (trim $line " \t\r") }}
{{- $skipLine = true }}
{{- else if $firstLine }}
{{- $firstLine = false }}
{{- $skipLine = true }}
{{- range split $line "" }}
{{- if in $treeColChars . }}
{{- $skipLine = false }}
{{- break }}
{{- end }}
{{- end }}
{{- end }}
{{- if $skipLine }}
{{- continue }}
{{- end }}
{{- if not $treeColPattern }}
{{- /* for the first non-empty line we try to find out if it is a tree line and set prefix column pattern according to its column width */}}
{{- range $char := (split $line "") }}
{{- if and (not $treeColPattern) (in $indentChars $char) }}
{{- $indentPattern = print $indentPattern "." }}
{{- else if in $treeColChars $char }}
{{- if $treeColPattern }}
{{- $treeColPattern = print $treeColPattern "[─ ]" }}
{{- $treeColPatternLen = add $treeColPatternLen 1 }}
{{- else }}
{{- $treeColPattern = print $treeColPattern "[│├└ ]" }}
{{- $treeColPatternLen = add $treeColPatternLen 1 }}
{{- end }}
{{- else if eq " " $char }}
{{- $treeColPattern = print $treeColPattern "[─ ]" }}
{{- $treeColPatternLen = add $treeColPatternLen 1 }}
{{- else }}
{{- break }}
{{- end }}
{{- end }}
{{- if not $treeColPattern }}
{{- /* it is not a tree line so break processing at all and leave content unchanged */}}
{{- break }}
{{- end }}
{{- /* it is a tree line so we reset the content and fill it by parsing next */}}
{{- $content = "" }}
{{- end }}
{{- $linePattern := print `^` $indentPattern `((?:` $treeColPattern `)*)([^` (delimit $treeColChars "") `].*)` }}
{{- range findRESubmatch $linePattern $line }}
{{- $newline := "" }}
{{- $rest := (index . 2) }}
{{- $treePrefix := (index . 1) }}
{{- $treePrefixLen := 0 }}
{{- range (split $treePrefix "") }}
{{- /* treeChars may contain Unicode chars which len messes up as it only counts bytes */}}
{{- $treePrefixLen = add $treePrefixLen 1 }}
{{- end }}
{{- $treeLevel := div $treePrefixLen $treeColPatternLen }}
{{- range seq $treeLevel }}
{{- if eq . $treeLevel }}
{{- /* last column needs its dash */}}
{{- $newline = print $newline "- " }}
{{- else }}
{{- $newline = print $newline " " }}
{{- end }}
{{- end }}
{{- /* have seen some weird Windows output that puts in empty lines in the tree, so only write if we have prefix AND rest */}}
{{- $rest = trim $rest " \t\r" }}
{{- if and $newline $rest }}
{{- $content = print $content $newline $rest "\n" }}
{{- end }}
{{- end }}
{{- end }}
{{- return $content }}
{{- end }}