SyntaxHighlight Version2

提供:yonewiki
2022年10月6日 (木) 18:26時点におけるYo-net (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

 以下のような独自のSyntaxHighlightでしたが、2022年9月下旬にMediawikiのアップデートをしたので、通常のSyntaxhighlightに移行済みです。無理やり使っていた頃が懐かしいですね。


 SyntaxHighlightはMediaWiki用のプログラム構文書式装飾表示エンジンのようなプログラムで、独自のWebsiteページを持つプログラマにとっては、みんなに綺麗にプログラムを魅せることのできる有り難いエンジンでして、これのVersionがなんと2.0に上がるという驚異的な進化を遂げたのです。といってもlexerという言語対応が増えたのと、装飾方法に変化が発生したのと行番号が表示されている状態でもコピーしやすい書式に変わっただけで、オプション変数に大きな変化はない。以前は変換エンジンも自前で持っていたのですが、Version2.0からはpygmentというプロジェクトのpythonで書かれたSyntaxHilightのエンジンを使うというシステムに変わっている。lexerが増えたのも、pygmentのおかげです。自分が使っているMediaWiki Version1.19では使えないとSyntaxHilightの公式ページに書いてある。けど、無理矢理、導入してやろうと試行錯誤の上<syntaxhighlight2 …>………'</syntaxhighlight2>という拡張機能を手に入れたのさ、ソースでも見るがいいさ、そこにはsyntaxhilight2という拡張タグがある。そして古いversionも同時に使えるという事になっていて、普通のsyntaxhilightという拡張タグも使える。

syntaxhighlightの例

Dim nVar = 0;
Dim nCnt = 0;
while(nCnt < 10){
    nVar = nVar + nCnt;
}
print("nVar=" + nVar);

syntaxhighlight2の例

Dim nVar = 0;
Dim nCnt = 0;
while(nCnt < 10){
    nVar = nVar + nCnt;
}
print("nVar=" + nVar);

 だから何?


 うんうん。わかるわかる。だから何だよね。うんうん。そうそう。そうだよ。だから何なんだよ。


 pygmentにはpygmentizeというモジュールがありまして、このモジュールは絶体パスを抱えているので、各自で配置パスを含めたモジュールの再構成作業が必要です。syntaxhighlightの公式サイトで配布されているpygmentには、この再構成をするためのモジュールがバンドル(抱き合わせ)られていて、それを実行することでpygmentizeがいい感じになるそうな。なので

>/use/local/bin/python3 ./create_pygmentize_bundle

 という感じ、実行します。python3のインストールパスはそれぞれのレンタルサーバや専用サーバ、あるいは自前サーバで異なるので合わせてもらえればよいかと思います。自前でサーバを持っている人は、自分のサーバでpygmentizeをインストールして、使うこともできます。


 もちろんMediaWiki Version1.19では、そのままでは全くピクリとも動きません。バージョンチェッカーを書き換えたり、そもそもMediaWiki自体にwfLoadExtensionという関数が無いのにこれらを作り込んでいく。MediaWikiServicesやServiceContainer。GlobalFuncion、DefaultSettings,ありとあらゆる関係するクラスをいじっていかないといけない。ものすごい作業量なのでここでは書けません。まずはLoad処理がうまく動作するところまで、動作を順に追っていく感じでした。Autoloadの方法も今のVersionと自分のVersion1.19とでは全然異なるし、ServiceWiringでwgXxxxxのグローバル変数の値を取得したりする処理がされていたり、MediaWikiの動きを追いながら追い詰める。load処理が出来上がると実際にsyntaxhighlight2拡張タグを入れてParserで呼び出される関数が何かを追いかけたりする作業をして、これまた少しづつ追い詰める。大変だったのが標準入力や標準出力の仕組みを知らなかったのでproc_openの使い方が全然わからなくて、辛かった。pipeってなんじゃって感じでした。shellフォルダにあるlimit.shに実行権を付与し忘れていたりもあったなぁ。なんだ動かんぞこれ?っていうね。あほみたいな時もありました。すべてが懐かしいです。


 ちがうんす。Versionあげればいいっていうけどこれ以上大きなシステムを導入したくないんす。なので、最小構成で導入したんす。


 みなさんは決して、マネしないでほしい。でもこの作業をとおしてPHPマスターにもなれるし、MediaWikiMasterにもなれます。pythonも少しわかります。無駄な努力とは決して無駄だけでは無いことを思い知ったのです。


 でも、でも、でも、でも!無駄!無駄!無駄!無駄じゃー!ガッシャーン!


 と、いう話だったとさ。