印刷 / PDF出力 / 構文ハイライトの改善 / RPMパッケージの提供開始 — Inkdrop

印刷 / PDF出力 / 構文ハイライトの改善 / RPMパッケージの提供開始 — Inkdrop
原文: https://blog.inkdrop.info/printing-pdf-export-improved-syntax-highlighting-rpm-package-c90e3f966a7f
v3.12.0が昨日リリースされました。いろいろ新機能や改善点が盛りだくさんなので紹介させてください。

たまにユーザさんから、エディタとプレビューの構文ハイライトの動作が違うことについて指摘を受けていました。これは実装方法の違いによるもので、プレビューはhighlight.jsを使用しているのに対して、エディタはCodeMirrorベースで出来ているためです。それによって動作の一貫性が損なわれていました。つい最近にも、アントンがこの事について指摘しました:
この問題は、highlight.jsとCodeMirrorで対応している言語が異なるためでした。例えば、JSXとPugはhighlight.jsではサポートされていません。違和感を覚えるのは当然でした。今まで、これは仕様ですとしか答えようがなかったのですが、ふと「CodeMirrorのシステムをプレビューのレンダリングに利用できないか?」という案を思いつきました。その方法を今まで思いつかなかったのは、Googleで「syntax highlight js」とかで検索しても出てこなかったからです。思考停止ですね。
このアイデアはアタリでした。ただ、いくつかの言語は非対応になりました (詳しくはCodeMirrorの対応言語 と highlight.jsのものをご参照ください)。しかしながら、それらはJSXやPugなどと比べて重要性の低いマイナーなものだったので許容範囲だと判断しました。もし構文ハイライトを追加したい場合は、プラグインを作ることで対応できるでしょう。
このアプローチは今取り組んでいるモバイル版のエディタ実装にも役立つと思っています。アントンを始めこのアイデアに至るきっかけを作ってくれたユーザさんに感謝します。
ちなみにCodeMirrorを使った構文ハイライトのReactモジュールはオープンソースで公開していますのでよろしければ使ってください。ちょっとまじめにenzymeなどを使ってテストも書きました: https://github.com/craftzdog/react-codemirror-runmode
InkdropはMarkdown書式の拡張に対応していて、math や sequence diagrams といったプラグインがあります。これらはMarkdownのレンダリングを拡張するものです。ちなみにHTMLエクスポートの機能も内部ではプラグインとして実装されています。問題は、HTMLでエクスポートするときに今まではこの拡張書式が無視されてしまっていたことです。でもremarkによる考え抜かれたデザインのお陰で、エクスポートによるレンダリング時にも拡張書式を使うことに成功しました。これでシーケンス図などもHTMLでレンダリングされた状態でアウトプットすることが出来ます。
先述の拡張Markdownの問題が解決したことによって、PDF出力とプリントアウトは簡単に実装できるようになりました。なぜならElectronは標準でそのためのAPIを提供していて、やる事はただ出力先を変えることだけだからです。
この機能はこの手のアプリでは標準的なものなので、やっとまともに実装できてとても良かったです。
先日フィリップがRPMパッケージ欲しいと要望を出していました:
InkdropはLinux向けにはUbuntuのみを公式でサポートしています。なぜなら、Electronコミュニティでの他のプラットフォーム向けのビルドプロセスは非公式だからです(理論上は動く)。その他のディストリビューションに対応するにはビルド作業や動作確認がすごく大変なので避けていました。でも、electron-installer-redhatを見つけたのでちょっと試してみることにしました。RPMパッケージを作ってフィリップに試してもらったら、Fedora 26で動いたと報告してくれました。
FedoraでもInkdropが動いたのはとてもうれしいです。今後のバージョンでもrpmパッケージは提供しようと思います。ただ注意点としては、Ubuntu以外のプラットフォームの動作はあくまで保証外ということです。もしインストールで問題が起きた場合は、ご自身で解決していただく必要があることをご留意ください。
Download now: https://www.inkdrop.app/Send feedback: https://forum.inkdrop.info/Contact us: contact@inkdrop.infoTwitter: https://twitter.com/inkdrop_app