「kanfont」は「LTsv10kanedit(tsvtool10)」を用いたフォントエディタ(グリフエディタ)です。

version(branch):20170119R141608 modify:20170128S130712

目次

⓪-0.ライセンス及びソフト使用の補足ガイドライン

※「MIT License」準拠。

MIT License - Choose a License
http://choosealicense.com/licenses/mit/
licenses/MIT_license - Open Source Group Japan Wiki - Open Source Group Japan - OSDN
https://ja.osdn.net/projects/opensource/wiki/licenses%2FMIT_license
MITライセンスを1行1行読んでいく | プログラミング | POSTD
http://postd.cc/mit-license-line-by-line/

※口語的説明。
・「LICENSE」も含めソースコードの閲覧やコピーに制限を設けない事。
・いかなる場合においても作者または著作権者は一切責任を負わない事。

⓪-1.インストール(ダウンロード・アンインストール)&セットアップ

※Pythonは別途インストールされているものとします(Pythonの導入分からない人は「LTsv10kanedit(tsvtool10)⑩-0.「L:Tsv」のFAQ」を参考)。

※Vimも別途インストールされているものとします(Vimの導入分からない人は「KEV①-0.「KEV(kanedit.vim)」をVimへセットアップ」を参考)。

ダウンロードは「https://github.com/ooblog/LTsv10kanedit」にある「Clone or download」ボタンを押すと出る「Download ZIP」メニューをクリック。
インストールは任意(なるだけユーザーディレクトリ内)のフォルダに「LTsv10kanedit-master.zip」を解凍するだけです(「LTsv10kanedit-master」フォルダが作成されるはずです)。
「*.py」のパーミッションがOFFになってたら実行可能に変更、Wineで使う場合は「wine_sh」フォルダ内の「*.sh」のWineパスを適宜修正。
最初に「kanmap.py」を起動(前バージョンの「LTsv/kanpickle.bin」ある場合は一旦削除してから)。「LTsv/kanpickle.bin」を新規作成してください。
「LTsv/kanpickle.bin」を初期化しない場合グリフ座標データが蓄積するまで起動や動作が重くなるか、バージョン(ブランチ)によってはエラーになる場合があります。
詳細は「kanmap①-0.「kanmap」の使い方(初回起動・表示編)」を参考。

フォント「kan5x5comic.ttf」も用意する場合は「③-0.「kanfont」のFAQ」を参考。

ooblog/LTsv10kanedit: 「L:Tsv」の読み書きを中心としたモジュール群と漢字入力「kanedit」のPythonによる実装です(準備中)。
https://github.com/ooblog/LTsv10kanedit

アンインストールはインストール時に作成した「LTsv10kanedit-master」フォルダを削除するだけです。

⓪-2.その他現在わかっている不具合や今後の課題

「Tahrpup6.0.5,Python2.7.6,vim.gtk7.4.52(vim-gtk)」および「Wine1.7.18,Python3.4.4,gvim8.0.134(KaoriYa)」で開発しています。Windows,cygwin,darwin,MacOSなどでの動作は確認しておりません。
フォント(グリフ)「kan5x5comic」は半角と全角の幅の比率が約5:3(1024:624)なのでアスキーアートで問題になる場合があります。グリフ不足で表示できない文字などあります。
「kan5x5comic.ttf」と「kan5x5.ttf」を同時に入れると麻雀牌が表示されない(「kan5x5.ttf」の絵文字代替4x5文字が優先される)場合があります。
私用領域と呼ばれる環境に左右される文字コードを漢直鍵盤の制御に用いてます。「kan5x5comic.ttf」を用意しないとソースが見辛い可能性があります。
人名に使える漢字の異体字を漢字配列「LTsv/kanmap.tsv」から単漢字辞書「LTsv/kanchar.tsv」に移管作業中。なので漢直鍵盤の漢字配列「LTsv/kanmap.tsv」が大幅に変更するかも。
マウスボタンの取得は保留。ホイールの取得は放置。tkk方面は手を出さない予定(コンボボックスなどはGTKのみサポート)。
GTKのコールバックから受けとる構造体を扱う方法が不明のため、GUIイベント経由のPCキーボード取得やファイルダイアログからのキャンセル取得などが不明。
「docs/」フォルダ内のドキュメントを「docs/kanedit_etc.tsv」ベースで描き直し中。執筆途中状態の関数一覧タグ解説項目あり。
LTsv/LTsv_doc.py」でタグの順序が厳格という問題があるのでいっその事スクリプト言語ごと新規に作ろうと思います(TSFの開発)。

LTsv版の「kanedit.py」の開発を凍結してTSF版の「kanedit」を作成する予定です。言語の開発には時間が必要なので、平行してVim版「LTsv/kanedit.vim」も開発です。
LTsv/kanedit.vim」と「kanedit.py」とで操作方法が乖離してますがTSF版もVim版の方向になるべく揃える予定です。LTsv版は互換性の維持程度に止まると思います。

TSF版作る前に漢字配列「LTsv/kanmap.tsv」のグリフ圧縮アルゴリズムを「5x10x」から「5x10x20x」に変更したいので、移行ツール作成→一時的に無圧縮→新アルゴリズムのグリフと交換などの間多少の混乱が発生するかと思います。

①-0.「kanfont」の使い方

kanfont

左上の漢直鍵盤
グリフ編集する漢字などを選択。漢直鍵盤の入力操作は「LTsv10kanedit(tsvtool10)⑨-2.漢直鍵盤の操作方法」を参考。
電卓機能は不使用。
縦のスケール
グリフを編集する文字を選択。漢直鍵盤に無い漢字も選択可能。
縦スケールのスピンボックス
グリフを編集する文字を選択。縦のスケールと連動。
U+ffff表記下の「CP」ボタン
クリップボードに縦スケールで選択されてる文字をコピー。
U+ffff表記下の「PT」ボタン
クリップボードの先頭1文字を使って文字を選択。左上の漢直鍵盤にも反映。
真ん中のキャンバス
グリフを編集。右回転の青色ポリゴンが描画用途、左回転の緑色ポリゴンがフォントだと反転消去グリフだと背景色消去。
クリックで頂点追加、ドラッグで頂点移動。ドラッグだけど頂点を動かさずクリックを離すと頂点は消える。
線分(長方形じゃなくて円の部分)をクリックで頂点を増やせる。
頂点を全て消すとポリゴンが1枚消える。
横のスケール
編集するポリゴンの変更。または新規ポリゴンレイヤーを選択。
横スケール下の「COPY」ボタン
ポリゴンレイヤーを複製。「PASTE」で貼り直す事が可能。クリップボード不使用。
横スケール下の「CUT」ボタン
ポリゴンレイヤーを削除。「PASTE」で貼り直す事が可能。クリップボード不使用。
横スケール下の「PASTE」ボタン
「COPY」「CUT」したポリゴンレイヤーを貼り直す。クリップボード不使用。
横スケール下の「UP」ボタン
ポリゴンレイヤーを重ねる順番を変更。左回転のポリゴンを浮上。
横スケール下の「DOWN」ボタン
ポリゴンレイヤーを重ねる順番を変更。右回転のポリゴンを沈める。
「grid」スピンボックス
ポリゴンの頂点位置を揃える。「活(5x)」では100「漫(10x)」では50を想定。
「grid」チェックボックス
通常OFF。スピンボックスの値より1少ない数値にグリッド指定する事も可能。グリフデザインでは杞憂だった機能。
「seg」チェックボックス
通常ON。ポリゴンの線分を表示&操作許可。
「Pce(piece)」チェックボックス
番号付き頂点を移動するとポリゴン1枚まるごと移動。頂点はキャンバスの外に移動できないので図形が潰れる場合に注意。必要に応じてOFF。Pce=piece。
「ref」チェックボックス
グリフ編集中に参考までに別のフォントを表示。
「活」「漫」「筆」ラジオボタン
キャンバスで編集するグリフを「活:kan5x5」「漫:kan5x5comic」「筆:kan5x5brush」から選択。
右側の入力欄
辞書項目「英名音訓送異俗熙簡繁越地顔鍵代逆非難活漫筆幅」を漢直鍵盤で入力します。クリップボード使用可能。
活漫筆幅がグリフ項目になります。グリフキャンバスで編集。頂点はSVGパスから独自形式に圧縮される場合があります。
テキスト入力欄(電卓)の入力操作は「LTsv10kanedit(tsvtool10)⑨-3.テキスト入力欄(電卓)の操作方法」を参考。
右下の「save」ボタン
「kan5x5.svg」「LTsv/kanchar.tsv」「LTsv/kanpickle.bin」に保存します。

②-0.「kanfont.py」と「5x10xTO5x10x20x.py」の関数一覧

「kanfont.py」の関数

kanfont_pathadjustment(pathpos=None)
表示グリフのパスの個数(レイヤー数)に合わせて横スケールの目盛り数を変化。
kanfont_code(pathpos=None)
縦スケール操作などで編集するグリフを選択した時の辞書項目表示更新など。
kanfont_codespin_shell(window_objvoid=None,window_objptr=None)
縦スケールのスピンボックス編集時の挙動。縦スケールと連動。グリフを選択。
kanfont_codescale_shell(window_objvoid=None,window_objptr=None)
縦スケール編集時の挙動。スピンボックスと連動。グリフを選択。
kanfont_codekbd(kbdentry)
縦スケールの漢直鍵盤の入力を受けとって編集グリフ選択に繋げる。
kanfont_codekbd_paste(window_objvoid=None,window_objptr=None)
クリッブボードを受けとって編集グリフ選択に繋げる。
kanfont_codekbd_copy(window_objvoid=None,window_objptr=None)
選択中のグリフをクリッブボードに転送。
kanfont_pathsel_shell(window_objvoid=None,window_objptr=None)
横スケール操作でグリフのパス(レイヤー)選択。
kanfont_grid_shell(window_objvoid=None,window_objptr=None)
「grid」スピンボックス変更時の挙動。
kanfont_inner_shell(window_objvoid=None,window_objptr=None)
「grid」チェックボックス変更時の挙動。innerオプションで挙動変更。
kanfont_piece_shell(window_objvoid=None,window_objptr=None)
「Pce(piece)」チェックボックス変更時の挙動。
kanfont_lineseg_shell(window_objvoid=None,window_objptr=None)
「seg」チェックボックス変更時の挙動。
kanfont_gothic_shell(radioNumber)
「活」「漫」「筆」ラジオボタン変更時の挙動。
kanfont_refer_shell(window_objvoid=None,window_objptr=None)
「ref」チェックボックス変更時の挙動。
kanfont_layerX_shell(window_objvoid=None,window_objptr=None)
横スケール下の「CUT」ボタンの挙動。
kanfont_layerC_shell(window_objvoid=None,window_objptr=None)
横スケール下の「COPY」ボタンの挙動。
kanfont_layerV_shell(window_objvoid=None,window_objptr=None)
横スケール下の「PASTE」ボタンの挙動。
kanfont_layerU_shell(window_objvoid=None,window_objptr=None)
横スケール下の「UP」ボタンの挙動。
kanfont_layerD_shell(window_objvoid=None,window_objptr=None)
横スケール下の「DOWN」ボタンの挙動。
kanfont_glyph_grid()
グリッド座標の計算。innerオプションで挙動変更。
kanfont_glyph_draw()
グリフ描画。キャンパス内にマウスがある時と外にあるときで描画内容が異なる。
kanfont_glyph_mousepress(window_objvoid=None,window_objptr=None)
キャンパス内でマウス押下。グリフ頂点の追加もしくは既存の頂点を掴む。
kanfont_glyph_mousemotion(window_objvoid=None,window_objptr=None)
キャンパス内でマウス移動。グリフ頂点の移動など。
kanfont_glyph_mouserelease(window_objvoid=None,window_objptr=None)
キャンパス内でマウス押上。グリフを「LTsv/kanchar.tsv」に書き込みなど。
kanfont_glyph_mouseenter(window_objvoid=None,window_objptr=None)
キャンパス内にマウス移動の挙動。
kanfont_glyph_mouseleave(window_objvoid=None,window_objptr=None)
キャンパス外にマウス移動の挙動。
kanfont_kbd_mousepress(window_objvoid=None,window_objptr=None)
縦スケール漢直鍵盤のマウス押下の挙動。
kanfont_kbd_mousemotion(window_objvoid=None,window_objptr=None)
縦スケール漢直鍵盤のマウス移動の挙動。
kanfont_kbd_mouserelease(window_objvoid=None,window_objptr=None)
縦スケール漢直鍵盤のマウス押上の挙動。
kanfont_keypress(window_objvoid=None,window_objptr=None)
キーボード押下の挙動。マウスがどのキャンパス(漢直鍵盤)にあるかで分岐。
kanfont_keyrelease(window_objvoid=None,window_objptr=None)
キーボード押上の挙動。kanfont_keypressと同じ関数を参照。
kanfont_calculatormouseinput_enter(calculator_canvas)
辞書項目入力後、グリフ幅をチェックしたり、キャンバスにグリフを反映させる。
kanfont_calculatormouseinput_shell(calculator_canvas)
辞書項目の漢直鍵盤で文字入力があった時の挙動。
kanfont_calculatormousepress_shell(calculator_canvas)
辞書項目の漢直鍵盤でマウス押下の挙動。
kanfont_calculatormousemotion_shell(calculator_canvas)
辞書項目の漢直鍵盤でマウス移動の挙動。
kanfont_calculatormouserelease_shell(calculator_canvas)
辞書項目の漢直鍵盤でマウス押上の挙動。
kanfont_calculatormouseleave_shell(calculator_canvas)
辞書項目の漢直鍵盤でキャンパス外にマウス移動の挙動。
kanfont_calculatormouseenter_shell(calculator_canvas)
辞書項目の漢直鍵盤でキャンパス内にマウス移動の挙動。
kanfont_svgsave_shell(window_objvoid=None,window_objptr=None)
「save」ボタンの挙動。
kanfont_svgmake(window_objvoid=None,window_objptr=None)
グリフから「kan5x5.svg」を生成する。
kanfont_configload()
設定ファイル「kanfont.tsv」を読み込む。
kanfont_configsave_exit(window_objvoid=None,window_objptr=None)
設定ファイル「kanfont.tsv」に保存する。kanfont_autosaveがONの場合「kanfont_svgmake()」も実行。

「5x10xTO5x10x20x.py」の関数

LTsv_glyphSVG5x10x(LTsv_glyph_path)
旧式のグリフパス伸張(SVGに戻す)。
LTsv_glyphSVG5x10x20x(LTsv_kanpath5x10x20x)
新式のグリフパス伸張(SVGに戻す)。
LTsv_glyph5x10x20x(LTsv_kanpathSVG)
新式のグリフパス圧縮。

②-1.「kanfont.tsv」のタグ解説

kanfont.tsv」は「kanfont.py」の設定ファイルです。

[kanfont|
「kanfont.py」の設定。
seek
縦スケール(編集中のグリフ)の値を保存。初期値は「ぱ」。
grid
「grid」スピンボックスの値を保存。初期値は「50」。
inner
「inner」チェックボックスの値を保存。初期値は「0」。
lineseg
「seg」チェックボックスの値を保存。初期値は「1」。
piece
「Pce」チェックボックスの値を保存。初期値は「1」。
gothic
グリフラジオボタン(活,漫,筆)の値を保存。初期値は「0」。
gridimage
編集中キャンバスに表示するグリッド画像ファイル名。初期値は「kanfont_grid25_5x5.png」。
refer
「ref」編集中キャンバスに表示できるフォント名。初期値は「Noto Sans Japanese Regular」。
refergrid
「ref」チェックボックスの値を保存。初期値は「1」。
referGTK
キャンバスに「refer」を表示する場合の位置調整と色。「GTK」で大きいフォントを表示するとズレが発生する。初期値は「X:-30 Y:-30 S:420 C:#E5E5E5」。
referTkinter
キャンバスに「refer」を表示する場合の位置調整と色。「Tkinter」で大きいフォントを表示するとズレが発生する。初期値は「X:-30 Y:-135 S:420 C:#E5E5E5」。
glyphcolor
キャンバス編集中のグリフやカーソルの色指定。R:右回転ポリゴン L:左回転ポリゴン X:#D96ED3 G:#9F6C00。初期値は「R:#6E81D9 L:#6ED997 X:#D96ED3 G:#9F6C00」。
dic_name
単漢字辞書保存先指定。初期値は「LTsv/kanchar.tsv」。
svg_name
SVGの保存先指定。初期値は「kan5x5.svg」。
font_name
グリフの名称。フォント名称にも使用。初期値は「活:kan5x5 漫:kan5x5comic 筆:kan5x5brush」。
font_glyphtype
「save」ボタンで保存するグリフは初期値の「漫」に固定されてるが、「活」に変える事でドット絵限定にしたり、「」に空指定する事でグリフラジオボタンによる選択ができる。
font_widths
フォント幅(全角,麻雀牌,半角)グループを生成。「kan5x5.svg」で「<font id="kan5x5comic_w624" horiz-adv-x="624">」のようなタグ生成に使う。初期値は「1024,824,624」。
autosave
初期値は「off」。「on」にするとウィンドウを閉じた時に「LTsv/kanchar.tsv(dic_name)」に自動保存可能。設定に関係なく「LTsv/kanpickle.bin」は上書保存。
savetime
「save」ボタンに保存時間を表示する演出用途。初期値は「@0h:@0n:@0s」。

②-2.グリフキャンバスの座標とSVGパスの座標の違い&圧縮形式5x10x20xの解説

・「kanfont」のグリフキャンバスサイズは512pxですがSVGパスの想定サイズは1024pxです。
・グリフキャンバスは左上が(0,0)ですがSVGパスは左下が(0,0)です。
・「kanfont」はポリゴン限定(直線しか編集できない)ので、SVGパスの読込も「M」と「z」しか対応してないことに注意。

「kanfont」はSVGパスを単漢字辞書「LTsv/kanchar.tsv」に保存する際に独自形式5x10x20xで圧縮して容量削減します(半角角括弧「[」「]」が用いられてたら圧縮されてるはず)。

「活」の5x系(グリフキャンバス上「grid」100px)
25分割するので36個のxy座標(0123456789?!+-*/%^#$&;@=_LMN`Zklmnyz)で表現する事で圧縮。
「漫」の10x20x系(グリフキャンバス上「grid」50px25px)
縦横それぞれ10分割するのでX軸Y軸それぞれ11個のx座標(ABCDEFGHIJK)y座標(OPQRSTUVWXY)で表現する事で圧縮。
実際の「漫」グリフでは25px単位の「grid」も使ってるので圧縮されない場合もあります。
そこで20分割に対応した座標表現も追加。x座標(AaBbCcDdEeFfGgHhIiJjK)y座標(OoPpQqRrSsTtUuVvWwXxY)で圧縮。
「筆」の無圧縮系
都道府県アイコンが10pxで描画とか「grid」が細かいので圧縮予定はありません。

③-0.「kanfont」のFAQ

Q.「kanfont」で他のフォントを編集できますか?
A.「kanfont」はフォントファイルを読み込めないので「kan5x5comic」のグリフ編集しかできません。
既存のフォントのパスをSVGに変換してtsvを上書きする荒技も考えられますが、現状「kanfont」は曲線を扱えないので普通に読み込めるフォントは皆無かと。
Q.圧縮されてない素のSVGを確認したい。
A.「save」ボタンで「kan5x5.svg」が保存できるのでそっちで確認できるはず。
もしくは「5x10xTO5x10x20x.py」を修正すれば無圧縮版の「LTsv/kanchar.tsv」を別途作成できるはず。
Q.「kan5x5.svg」は何に使うんですか?
A.「kan5x5comic.svg」をFontForgeで「kan5x5comic.ttf」に変換できます。
Q.「FontForge」が使えない環境というかLinux以外のOSだと謎の環境構築が複雑なので簡単な方法お願い。
A.「約四文字」(http://ooblog.github.io/)から「kan5x5comic.woff」をダウンロードしてWOFFコンバータで「kan5x5comic.ttf」にする別ルートもあります。
Q.上下左右で漢直鍵盤のカーソルを移動しようとすると別のGUIにフォーカスが移動してしまいます。
A.[KANA]+[NFER]などで「σ」鍵盤を表示した状態でHJKLによりカーソルが移動できます。
漢直鍵盤の入力操作は「LTsv10kanedit(tsvtool10)⑨-2.漢直鍵盤の操作方法」を参考。
テキスト入力欄(電卓)の入力操作は「LTsv10kanedit(tsvtool10)⑨-3.テキスト入力欄(電卓)の操作方法」を参考。
Q.「PT」ボタンで文字を貼り付けたのに漢直鍵盤に反映されない。
A.「LTsv/kanmap.tsv」に含まれてない漢字を探索するには「kanedit」の「探」コマンドを用いてください。
例えば都道府県アイコン「」は「kanedit」の「電卓」で「探」すると「探⇔東」が求められます。
Q.左回転のポリゴンがフォントに変換したときに描画されてましたよ?
A.フォントの描画ルールでは、逆回転のポリゴンが重なった場所が透過になるアルゴリズムだからです。
「L:Tsv」のグリフは単純に順番に描画するアルゴリズムなので「UP」「DOWN」ボタンでポリゴン描画順の入れ替えてください。

④-0.作者について、例えば連絡先。

更新情報はGitHubやブログを確認してください。

ooblog/LTsv10kanedit(GitHub)
https://github.com/ooblog/LTsv10kanedit
[kanedit] - 大風呂ダ敷
http://d.hatena.ne.jp/ooblog/searchdiary?word=*[kanedit]
↑Top