OLE開発記(2)

Tree of Savior のオープンβで進捗に悪影響がありましたが、最初の熱が醒めたので、どうにかなります。なると思う、たぶん…

何もしてないわけではなく、色々作ってはいた。

OLEという名前について

OutLineEditorの略のつもりだったが、Windowsにそういう仕様があって、というツッコミが多かった。全く知らなかった。

OLEとは|Object Linking and Embedding - 意味/定義/解説/説明 : IT用語辞典

元々ole(仮)なので、名前を変えることには抵抗はないけど、まだ名前が思い浮かばないので、とりあえずこのままで。。

Markdownコンパイラの実装

色々と文法を拡張したり出力をコントロールするのに、自前のコンパイラを持っておくと便利と思って、remark をベースに実装した。

数式プレビューしたり、キャレット位置でコンパイル先とスクロール位置を同期する仕組みを作ったりしている。textlint の組み込みもできる。

スクロールの最適化

フォーカスが当たった瞬間にwysiwygのエディタを有効化した場合、下押しっぱなしで高速に移動したい場合に突っかかりまくって邪魔だったので、編集に入るまでは雑に pre につっこむ感じにしてみた。

正直やや違和感ある。特定の分量を超えたら、でコントロールしてもいいかもしれない。

タイトル

元々シート(編集単位)は記事名の情報を持っていたが、中身と独立してシート名が存在するのが実体と乖離して嫌な気がしたので、inline-yaml記法(独自記法ではなくgithub flavored markdownの仕様の一部)でtitleプロパティを埋め込んだらそれを表示するようにした。タイトルを持たない場合は、文頭をtruncateして表示する。

編集に入ったときに titel: < ここ の部分にcaret移動したい。他のメタ情報もここに書けるようにする。

タイトル名の同期

このためにファイルツリーの部分更新の仕組みを入れた。 編集する度にタイトルが編集されてないか監視してるが、入力の度に監視しているので、コスト的にあまりおいしくない気がしている。あとで入力まとめて最終入力から 1s ぐらいにイベントを束ねる。

シート結合/並び替え

同階層で複数選択してcmd+shift+j でシートを結合できるようにした。 cmd+shift+↑↓で並びを変更できるようにした。

複数階層にまたがった記事の結合パターン、なにが正しいのな何もわからない(ヒューリスティックも思いつかない)ので、とりあえず禁止しておくことにする。

次やること

  • グループに出力に含むかの設定を持たせる
  • グループに出力時の階層設定を持たせる(headingの数をずらす)
  • 出力(仮)
  • シート検索
  • グループごとの階層コントロール
  • リビジョン機能を作るか検討

リビジョン機能

シート単位で特定の状態のスナップショット作って、あとで現在の状態と比較できるようにしておきたい、と思いついてはいるが、ぶっちゃけ他にやることも多いので後回し。

リリース目標

出力機能の仕様がまだ決まってないので、DBスキーマを変更する可能性が高く、まだまだβテストやるのは厳しい。出力機能の仕様が固まったら安定しそう。まず機能面を固めて、スキーマが決まったらデザインのブラッシュアップする、予定。

とりあえずDBのdump機能とマイグレーションがあればどうにかなるっちゃなるんだけどなー。