「kanfont」は「LTsv10kanedit(tsvtool10)」を用いたフォントエディタ(グリフエディタ)です。
version(branch):20170119R141608 modify:20170128S130712
目次
⓪-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_Tab-Separated-Forth」開発予定。
- https://github.com/ooblog/TSF1KEV
TSF版作る前に漢字配列「LTsv/kanmap.tsv」のグリフ圧縮アルゴリズムを「5x10x」から「5x10x20x」に変更したいので、移行ツール作成→一時的に無圧縮→新アルゴリズムのグリフと交換などの間多少の混乱が発生するかと思います。
②-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」しか対応してないことに注意。
- パス – SVG 1.1 (第2版)ウェブ関連仕様 日本語訳
- https://triple-underscore.github.io/SVG11/paths.html
- フォント – SVG 1.1 (第2版)ウェブ関連仕様 日本語訳
- https://triple-underscore.github.io/SVG11/fonts.html
「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」に変換できます。
- FontForge
- http://fontforge.github.io/ja/
-
Q.「FontForge」が使えない環境というかLinux以外のOSだと謎の環境構築が複雑なので簡単な方法お願い。
-
A.「約四文字」(http://ooblog.github.io/)から「kan5x5comic.woff」をダウンロードしてWOFFコンバータで「kan5x5comic.ttf」にする別ルートもあります。
- ふぉんと - 「約四文字」(http://ooblog.github.io/)
- https://ooblog.github.io/%E3%81%B5%E3%81%89%E3%82%93%E3%81%A8.html
- WOFFコンバータ
- http://opentype.jp/woffconv.htm
-
Q.上下左右で漢直鍵盤のカーソルを移動しようとすると別のGUIにフォーカスが移動してしまいます。
-
A.[KANA]+[NFER]などで「σ」鍵盤を表示した状態でHJKLによりカーソルが移動できます。
漢直鍵盤の入力操作は「
⑨-2.漢直鍵盤の操作方法」を参考。
テキスト入力欄(電卓)の入力操作は「
⑨-3.テキスト入力欄(電卓)の操作方法」を参考。
-
Q.「PT」ボタンで文字を貼り付けたのに漢直鍵盤に反映されない。
-
A.「LTsv/kanmap.tsv」に含まれてない漢字を探索するには「kanedit」の「探」コマンドを用いてください。
例えば都道府県アイコン「」は「kanedit」の「電卓」で「探」すると「探⇔東」が求められます。
-
Q.左回転のポリゴンがフォントに変換したときに描画されてましたよ?
-
A.フォントの描画ルールでは、逆回転のポリゴンが重なった場所が透過になるアルゴリズムだからです。
「L:Tsv」のグリフは単純に順番に描画するアルゴリズムなので「UP」「DOWN」ボタンでポリゴン描画順の入れ替えてください。