コードとはてな記法

昔はYahoo! ブログに書いていたので、コードのハイライトなんて夢のようでしたが、HatenaBlogでは「はてな記法」を使えば自動的にコードをハイライトしてくれます.

 

なのですが、私の見た感じからするとちょっとXMLの表示はどぎつすぎます.もう少しVSCodeのような洗練された色にできないものか?(もちろんCSSを触れば出来るんでしょうけれども)

 

あと、最近のXSLTではXPathの部分がやたらと大きくなって、これは大抵@selectの中身、つまり属性なのですべて真っ赤な表示です.あまりに芸がありません.他の方のブログを見ているととてもきれいなコードのハイライトを行っていてうらやましく思えます.

 

そんなときxsllistのメーリングリストを見ていたら、DeltaXMLのPhil FearonさんがVSCodeで使用できる拡張機能をポストしてくれました.

 

https://www.biglist.com/lists/lists.mulberrytech.com/xsl-list/archives/202004/msg00029.html

 

これは!と思い、早速GitHubから xpath-embedded-0.0.1.vsix

を落として最新のVSCodeに組み込んでみたのが以下のスナップです.

 

f:id:toshi_xt500:20200414234430p:plain

VSCodeXSLTスタイルシート表示画面

ちょっと小さいのですが、中を見ていただくとXPathの中まで解析してコードのハイライトをしていてくれます.スゴイ!

 

ソースコードを落として勉強がてら見させていただいたのですが、TypeScriptでした.ああそういうことなんですね.VSCodeはHelpからToggle Developer Toolsを選ぶとブラウザのEdgeと同じようなデバッグ画面が表示されます.つまりVSCodeの表示はHTMLそのものなんでした.どおりでいろんな拡張パックがあって、いろいろな言語に対応できている訳です.

 

さて、このように表示させたVSCodeはHTMLなので、Copy/Pasteすれば、このブログにも貼り付けられます.なんですが、やはりVSCodeの表示を張り付けているので、そのままでははみ出してしまったり、改行幅がちょっと大きすぎるなど、いろいろ触りたくなります.しかし、スタイルは@style="..."にすべて展開されてしまっているので、HTMLモードにして直すのも結構大変です.例えば以下のような具合:

 

    <xsl:template match="/">
        <!-- 最も長い文字数の名前を出力する.複数あったら最初のものを出す. -->
        <xsl:variable as="xs:string?" name="aLongName" select=" $friends => fold-left( '', function($name1, $name2) { if (string-length($name1) ge string-length($name2)) then $name1 else $name2 } )" />
        <xsl:sequence select="if ($aLongName => exists()) then ('A longest name: ' || $aLongName) => ahf:system.out.println() else ()"/>
    </xsl:template>

 

なかなか自分の思う通りには行かないものです.XPathの部分は自分で解析できれば、これと同じような結果も得られると思うので、少し勉強しようと考えています.