1月 2018

Twitter Digest 2018-01-08

  • Sublime Text 3用のasymptote syntax が見つからない。Atom用を変換(CSON->JSON->XML)したけどうまく動作せず。うーむ。困った。 01:03:40, 2018-01-08
  • 何とかSublime Text 3でのAsymptoteのsyntax highlightに成功。PackageDevを使って,JSON-tmLanguageを新規作成。ATOMから持ってきたCSONをJSONに変換して,コピペ。エラー箇所をコメントアウトしたら上手く行った。 10:00:57, 2018-01-08
  • Sublime Text 3からAsymptoteのビルド&プレビューも出来るようになった。以前,upLaTeXの独自ビルダーを作った経験が生きた。 11:12:45, 2018-01-08
  • Asymptoteのsyntax highlightに関しては,Emacsの方が上だが,Sublime Text 3に移行しても良いレベルではある。 11:15:27, 2018-01-08
  • AsymptoteにはEmacs用のモードが内蔵されているが,Syntaxはどのようにして生成したのだろうか。 11:16:24, 2018-01-08
  • 変換用のスクリプトを起動しようとしたら,python3が無いよと言われ,Homebrewで入れようとしたら,アップデート始めて,ruby が2.0なので2.5に上げよと言われ,updateした。けっこう時間かかった。最近homebrew全然使ってなかったなあ。 21:09:31, 2018-01-08

Sublime Text 3でAsymptoteのsyntax highlight表示

最近,AtomやらBracketsやらVisual Studio Codeやら,新しいエディター(文書編集プログラム)を使っているのだが,やはり Sublime Text 3の軽快さにはかなわない。ということで,LaTeX文書に関しては,Sublime Text 3に戻ってきたのだが,図版作成プログラムのAsymptoteについては,以前と変わらず Emacs を使っているのだった。

Emacsを使う理由は Syntax Highlight ができるから。あと,C-c C-cでビルド&プレビューが出来るし。ビルドの方は,Sublime Text 3でも自前ビルドシステムを作れば簡単なのだが,シンタックス・ハイライトできるパッケージが見つからなかった。

いろいろ調べてみると,ATOM用のAsymptoteパッケージが見つかった。これに,シンタックス・ハイライト用のデータが付いているので,これを移植できないかと考えた。試行錯誤したが,以下の方法で,とりあえず出来た。

まず,ATOM用Asymptoteパッケージ付属のasymptote.csonというファイルをJSON形式に変換する。これはATOMにCSON-parserというパッケージを入れることで出来た。ファイルの先頭に無駄な{}が付いていたので,これを手動で削除。以上で,asymptote.JSONが出来た。

次に,Sublime Text 3にPackageDevというパッケージをインストールする。それを用いて,JSON形式のTextMate Languageファイルを新規に作る。パッケージ・コントロールから選んで行って,New Langauage Syntax (JSON-TextMate) 的な表示のものを選ぶと,雛形が作成される。それをasymptote.JSON-tmLanguage という名前で保存する。

pattern:[] の中身が空っぽなので,そこに,先に変換して作ったasymptote.JSONのpattern:[…] の中身をコピーする。インデントが2文字になるように調整。これは必要か分からないが。言語の名前と拡張子をそれぞれ Asymptote, asy として保存。

これをTextMateの言語ファイル形式に変換する。Build SystemをConvert to … にして,Build with … から Convert to Property List を選択。すると,なんとエラー。25行目あたりで,Expected Dictionary というエラー。このブロックだけ,begin, beginCaptures などという語句がある。そこで,このブロックをコメント・アウトして,再び Convert to Property List する。今度はエラーもなく,asymptote.tmLanguage というファイルが出来上がった。拡張子がxmlでないのが不思議だったが,どうやら,PackageDevが作ったJSON-tmLanguageの1行目がshebang的になっているようだ。コメントなのだが,
// [PackageDev] target_format: plist, ext: tmLanguage
と書いてある。これを読んで,plistに変換し,拡張子を tmLanguage にしているらしい。

以上で,asymptote.tmLanguage が完成した。これを,Package/User/ に移動して,Sublime Text 3を再起動すると,SyntaxにAsymptoteが表示されていて,拡張子 asy のファイルは自動的に,syntax highlight される。

これで,一応の目的は果たした。しかし,比較してみると,Emacsの表示の方が,まだ完成度が高いようだ。Emacsではgeometryで定義された line型なども,ちゃんと予約語として表示されるが,ATOMのAsymptoteだと line はただの変数と同じ。ということで,完全に満足はできないのだが,まずまずではある。