TATEditorとは
皆さんも一度はテキストを表示するプログラムを作ったことがあると思います。
私も初めて自分の意思で作ったプログラムはFreeTypeでラスタライズしたグリフをコンソール上になんとなく表示するというものでした。
TATEditorはそれに少しだけ機能を追加したクロスプラットフォームな縦書きアウトラインエディタです。
※TATEditor Advent Calendar 2016 1日目の記事です。
※本ページの内容はTATEditor 3.3.101に基づいた情報です。
1. 何ができるのか
テキストデータを表示する
ただのバイナリデータが人間の認識できる文字としてディスプレイに表示されます。便利ですね。
行配置\書字方向 | 縦書き | 横書き |
---|---|---|
通常 | ||
傘連判 |
テキストデータを編集する
上のような表示でも自由に新しい文字列を追加したり、不要な文字列を削除したり、文字列を移動したりできます。
テキストファイルを開く
アクセス可能なファイルをテキストファイルとして読み込んで扱うことができます。
テキストファイルを保存する
アプリケーション上で取り扱っているUnicode列を指定した文字コードでストレージに書き込むことができます。
2. 主な機能
- クロスプラットフォーム
- Windows, macOS, Ubuntuに対応
- テキスト描画はOSに非依存
- 文字レイアウトへの対応
- ルビ
- 傍点
- 割注
- 縦中横
- 上付き文字
- 下付き文字
- 牛耕式
- 書字方向の選択
- 行方向の選択
- 傘連判
- ページ表示
- 文字レイアウトとは直交
- 段組
- 折り本
- N-up機能
- 出力機能
- PDF出力
- WYSIWYG
- フォント埋め込み
- タグ付きPDFに対応
- 文書構造を保存される
- 独自実装
- EPUB出力
- 非常に簡易なもの
- PDF出力
- クロスプラットフォームなカラー絵文字環境
- すべての環境で一部のカラー絵文字の表示に対応
- DirectWriteには負けます。
- 編集・検索
- 複数選択
- 矩形選択
- 木構造の編集履歴
- 行単位に独立した編集履歴
- 正規表現検索・置換・ハイライト
- シンタックスハイライト(正規表現)
- その他
- アウトライン機能
- 文字数カウンタ
- 大雑把な原稿用紙枚数カウンタ
- 厳密性は定義による
- ウィンドウ透過表示機能
- Windows, macOS, Ubuntu全てで文字以外を透過させた表示が可能
- 指定間隔での自動バックアップ
- Unicodeやフォントへの低レイヤでの対応
- JavaScriptベースのマクロ機能
3. TATEditorの動作環境
いずれの環境でも、同じフォント・同じ表示設定ならばピクセルレベルで同じ描画結果が得られます。
Mac・WindowsのHigh DPI環境でもピクセル単位で動きます。
Windows XP SP3以降で動く……?
上の表参照
macOS 10.7以降で動く……?
上の表参照
Ubuntuで動く(詳細な動作環境わからず)
下記参照(Ubuntu 14.04で文字以外を投下した状態でのスクショ)
4. TATEditorの開発環境
- C++11
- 最近ようやくC++11を使えるようになりました。
- Mac OS X 10.6以下のサポートを切り捨てたおかげ(C++0xのライブラリしか提供されない)
- Windows
- Visual Studio Community 2015
- 最高です
- macOS
- Xcode 8
- だいぶ慣れてきた
- Ubuntu
- Eclipse 3.8.1
- ビルドと動作チェックだけ
- 最近ようやくC++11を使えるようになりました。
- 使用ライブラリ
- AGG 2.4 (アウトラインのラスタライズ)
- FreeType 2.7.0 (フォントのヒンティングなど)
- ICU 56.1 (Unicodeや文字コード周りの処理)
- wxWidgets 3.1.0 (クロスプラットフォームなGUIライブラリ)
- v8 (マクロ用のJavaScriptエンジン)
5. 明日以降のアドベントカレンダー
縦書きや斜め書きや牛耕式に対応したエディタTATEditorを作る過程で得た、それなりに有用そうな部分を紹介していきたいと思っています。
おそらく以下のような内容です。
- テキストを取り扱う上で注意すること
- フォントの仕組み
- カラー絵文字の仕組み
- 文字列描画について
- 各OSでのIMEの仕組み
- 使用しているライブラリについて
- TATEditorの編集履歴の仕組み
何かTATEditorでこういう使い方もあるよ、などの記事を書いてくださる方がいればどんどん書いてください。