はてなブログさんのスーパーpre記法で対応してくれれば悩まないんですけど。
SyntaxHighlighter で表示するようにしていますが、markdown のように ``` でくくっていないため特殊文字がhtmlタグに勝手に変換されてしまいます。
今回は、その対策です。
目次
どんな問題なのか
例えば、以下のコードを表示してみましょう。
string[]$hoge "<>" https://tech.guitarrapc.com
普通にはてなブログで SyntaxHighlighter を使って書いてみます。
<pre class="brush: powershell;"> string[]$hoge "<>" https://tech.guitarrapc.com </pre>
結果このように崩れて表示されます。(コード変換されないように変換された結果を載せます。)
string[]$hoge "<>" <a href="https://tech.guitarrapc.com">https://tech.guitarrapc.com</a>
一度では、[]などの変換され具合がわかりませんが、もう1回同様に書くと影響が出ます。 つまりこういう感じで2回書くと
<pre class="brush: powershell;"> string[]$hoge "<>" https://tech.guitarrapc.com </pre> <pre class="brush: powershell;"> string[]$hoge "<>" https://tech.guitarrapc.com </pre>
このように表示されます。
string<span data-unlink="">$hoge "<>" https://tech.guitarrapc.com </span> string$hoge "<>" <a href="https://tech.guitarrapc.com">https://tech.guitarrapc.com</a>
問題となる特殊文字
ようは html タグに変換にされてしまう原因を取り除けばいいわけです。
問題となる特殊文字の対象と変換に使うHTML Entity Codeは以下です。
ASCII Character | HTML Entity Code |
---|---|
[ | [ |
] | ] |
< | < |
> | > |
: | : |
( | ( |
) | ) |
変換する
これらを差し替えて次のようにすれば、表示が崩れません。
string[]$hoge "<>" http://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年、ついに対応してくれました!