読者です 読者をやめる 読者になる 読者になる

tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

はてなブログで SyntaxHighlighter を使って PowerShell コードを表示するときの注意

はてなブログさんのスーパーpre記法で対応してくれれば悩まないんですけど。

SyntaxHighlighter で表示するようにしていますが、markdown のように ``` でくくっていないため特殊文字がhtmlタグに勝手に変換されてしまいます。

今回は、その対策です。

どんな問題なのか

例えば、以下のコードを表示してみましょう。

string[]$hoge
"<>"
http://tech.guitarrapc.com

普通にはてなブログで SyntaxHighlighter を使って書いてみます。

<pre class="brush: powershell;">
string[]$hoge
"<>"
http://tech.guitarrapc.com
</pre>

結果このように崩れて表示されます。(コード変換されないように変換された結果を載せます。)

string[]$hoge
"<>"
<a href="http://tech.guitarrapc.com">http://tech.guitarrapc.com</a>

一度では、[]などの変換され具合がわかりませんが、もう一回同様に書くと影響が出ます。 つまりこういう感じで2回書くと

<pre class="brush: powershell;">
string[]$hoge
"<>"
http://tech.guitarrapc.com
</pre>

<pre class="brush: powershell;">
string[]$hoge
"<>"
http://tech.guitarrapc.com
</pre>

このように表示されます。

string<span data-unlink="">$hoge
"<>"
http://tech.guitarrapc.com
</span>
string$hoge
"<>"
<a href="http://tech.guitarrapc.com">http://tech.guitarrapc.com</a>

問題となる特殊文字

ようは html タグに変換にされてしまう原因を取り除けばいいわけです。

問題となる特殊文字の対象と変換に使うHTML Entity Codeは以下です。

ASCII Character HTML Entity Code
[ &#91;
] &#93;
< &lt;
> &gt;
: &#58;
( &#040;
) &#041;

変換する

これらを差し替えて次のようにすれば、表示が崩れません。

string&#91;&#93;$hoge
"&lt;&gt;"
http&#58;//tech.guitarrapc.com

表示結果です。

string[]$hoge
"<>"
http://tech.guitarrapc.com

意図した通りに表示できています。

変換スクリプト

というわけで、変換スクリプトです。

guitarrapc - PowerShellUtil / Resolve-SyntaxHighlighterPowerShellIntoHatena

コードをヒアストリングで囲んで、 | で渡すだけです。

$inputcode = @'
string[]$hoge
"<>"
http://tech.guitarrapc.com
'@
$inputcode | Resolve-SyntaxHighlighterPowerShellIntoHatena

はてなさん、スーパーPre記法に対応してくだされ~

注記

2016年、ついに対応してくれました!

tech.guitarrapc.com