プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

GitBucketのシンタックス拡張プラグインを作ってみた

 はい、タイトルの通りです。

 GitBucketは入れやすいし、愛用させて頂いているのですが、大問題があるのです。
 それはシンタックハイライト機能がしょぼいと言うこと。とくに、Verilogとかね、悲惨なことになりますよ。
 別にGitBucketのシンタックスハイライトが有ろうが無かろうが、開発で困ることはないけど、ちょっとしたコミュニケーションツールとして、残念な感じになるのをどうにかしたかったんだよね。




 さて、GitBucketは構文ハイライトにGoogle Code Prettifyを使用しています。Prettifyは何も指定しなくても、何となく一般的な構文を使って、何となく良い感じにハイライトしてくれます。
 しかし、あくまでC言語っぽく何となくであって、より精度良くハイライトするには言語を指定する必要があります。
 言語はJavaやCなどのメジャーな言語は何もしなくても初めから定義されていますが、Lispやら、VHDLやら、CSSは外部ファイルとして定義されているので、利用するにはその外部ファイルを読み込ませてやる必要があります。ていうか、このデフォルトに入ってない奴らにScalaがあるんだけど、竹添様は気にならなかったのかな………

External Prettify Plugin

 上記の読み込み作業をGitBucketは行ってくれないので、

「拡張子を取得」→「言語を判断」→「必要なファイルを読み込む」

という処理をするプラグインを、土日でなんとかかんとか作ってみました。
 いやー、もう、さっぱどわからねぇ。Scala知らない、SQL知らない、HTMLもJavaScriptも分からないとかいう、なんの為に生きてるのか分からない人間のゴミクズが作った物なので、問題はいっぱいあるでしょうが、ひとまず公開。
 こういうプラグインないよね?あったら私の土日完全に無駄だったわ。

github.com


 なお、わかりやすさの為に拡張子と言いましたが、実際には後方一致です。というのも、「CMakeLists.txt」の様にファイル名全体で言語が決まる奴とか、「.p2.inf」の様に拡張子の中に.が入る奴とかいることに気がついて、後方一致に途中で変更しました。

 Google code prettifyに最初から組み込まれている主要な言語については、特に設定しなくても拡張子から判断する様にしています。

scalaの例:(違いが見にくい………)
f:id:nodamushi:20180219012750p:plain:w300

cssの例:
f:id:nodamushi:20180219013557p:plain:w350

 

設定をする

 件のVerilogなどは外部ファイルとしてですら、Google Code Prettifyには入っていません。VHDLはあるのに。APOLOとかいう謎の言語はあるのに。はぁ、萎えるわー………
 まぁ、無いなら作れば良いじゃない!

 

 というわけで、まずは、自分でシンタックスハイライトを作り、それを新しいレポジトリにあげます。
 自分で作りと言いましたが、今回はBooneJS さんという方が作ったのをそのまま持ってきました。(おい
f:id:nodamushi:20180219014101p:plain:w300

 あげたら、GitBucketのデフォルトプラグインのPagesを使ってJavaScriptとして読める様にします。(はじめからgh-pagesでpushしてもいいけど)
f:id:nodamushi:20180219014253p:plain:w300


 そしたら、以下のルールを設定します。

  1. .vで終わるファイルをv言語とする。(BooneJS さんがvという名前で定義していたから)
  2. v言語の場合、/root/mylangs/pages/lang-sv.jsを読み込む。(/root/mylangsは先ほど作ったレポジトリ)

f:id:nodamushi:20180219015545p:plain:w300

 なお、.v→vという定義はデフォルトでしてあるので、1は実は不要です。
 Verilogだけ贔屓です。( ^ω^)  だってVerilogの為に作ったんだもん!

 すると、妙に緑のハイライトが多かったVerilogのファイルが、綺麗にハイライトされる様になります。

f:id:nodamushi:20180219020039p:plain:w300


 やったね。
 ていうか、なんか、私って前もシンタックス系のプラグイン作ったよな………。この時はSDCC(組み込みC)で、今はVerilog(論理回路)か………どんどん低レベルになってるな。次はアナログ回路かな………