PowerShell 6.1のConvertFrom-Markdownを使ってMarkdownファイルからHTMLファイルを生成してみる
PowerShell 6.1を導入したので、追加されたConvertFrom-MarkdownコマンドレットでMarkdownファイルからHTMLファイルを生成してみます
Markdown系のコマンドレットを確認する
とりあえず Get-Help
で ConvertFrom-Markdown
のパラメータとか戻り値とか確認してみます
pwsh >Get-Help -Name 'ConvertFrom-Markdown' NAME ConvertFrom-Markdown SYNTAX ConvertFrom-Markdown [-Path] <string[]> [-AsVT100EncodedString] [<CommonParameters>] ConvertFrom-Markdown -LiteralPath <string[]> [-AsVT100EncodedString] [<CommonParameters>] ConvertFrom-Markdown -InputObject <psobject> [-AsVT100EncodedString] [<CommonParameters>] (以下略)
ざっくり -Path
に Markdown ファイル渡せばいいらしいです
ちなみに Get-Help ConvertFrom-Markdown -Online
を実行したら https://docs.microsoft.com/ja-jp/powershell/module/Microsoft.PowerShell.Utility/ConvertFrom-Markdown に行けますが、現時点では 404 Not Foundだそうです
実際に動かしてみる
sample.md という名前で以下の様なファイルを用意して
# サンプルマークダウンファイル これはサンプル用のマークダウンファイルです [example.com](http://example.com)
ConvertFrom-Markdownの -Path
に渡してやります
pwsh >[Microsoft.PowerShell.MarkdownRender.MarkdownInfo] $md = ConvertFrom-Markdown -Path 'sample.md'; pwsh >Format-List -InputObject $md; Html : <h1 id="section">サンプルマークダウンファイル</h1> <p>これはサンプル用のマークダウンファイルです</p> <p><a href="http://example.com">example.com</a></p> VT100EncodedString : Tokens : {Markdig.Syntax.HeadingBlock, Markdig.Syntax.ParagraphBlock, Markdig.Syntax.ParagraphBlock, Markdig.Extensions.AutoIdentifiers.HeadingLinkReferenceDefinition} pwsh >$md.Html; <h1 id="section">サンプルマークダウンファイル</h1> <p>これはサンプル用のマークダウンファイルです</p> <p><a href="http://example.com">example.com</a></p>
戻り値の PowerShell.MarkdownRender.MarkdownInfo
オブジェクトの Html
プロパティにbody要素の内容となる文字列が格納されているようです
ちなみに、void要素があった場合、XMLとしてはパースエラーになりますので ('<root>',$md.Html,'</root>' -Join '') -as [Xml.XmlDocument]
とかやっても null
が帰ってきます
ここで「じゃあvoid要素がったら終了タグを追加して」とかやりだすと話が大きくなるので今回は雑に行きます
pwsh >'<!DOCTYPE html><html><head><meta charset="utf-8"><title>sample</title></head><body>' + $md.html + '</body></html>' > sample.html;
我ながら本当に雑だな、おい
PowerShell 6.x からはリダイレクト演算子 (>
) で出力したテキストファイルは UTF-8 (BOMなし) で出力されますのでHTMLファイルならこれでいでいけます (ちなみに PowerShell 5.1 までは UTF-16 でした)
上記のままだと html
要素に lang
属性がないとか、title
要素が固定とか、出力ファイル名が固定とか色々ありますので、欲しい機能を色々足せば完成です
そんな感じで