大風呂は敷(迷信解毒)。

迷信解毒というか政治経済ネットのニュースなどに三人称多視点ぽくツッコミ入れていくスタイル。

LTsv9kantray(tsvtool9) version 20160226F222600。「kanfont」で「kanfont.svg」を作って「FontForge」で「kantray5x5comic.ttf」にフォント変換。

ミユ「今回の発想。
「Incscape」でフォント作成だとレイヤー毎に1文字なので大量の漢字を捌ききれない(200枚ぐらいで重くなる)。
→いっそフォント作成ソフトを作ってしまおう。
→単漢字辞書「kanchar.tsv」の「活」項目(活字)にフォントのパスデータ記録させよう。
→いっそのこと漢字配列「kanmap.tsv」も「kanfont」で編集できるようにしよう。
→「kanfont」にも漢直鍵盤を搭載しないと編集とか困難。
→漢直鍵盤を「L:Tsv」のGUI部品として扱えるようにしよう。
→マウスというかタップ(Tap)・フリック(Flick)・スワイプ(Swipe)操作だけで行えるように「字引鍵盤←new!!」しておこう。
→「LTsv_kbd.py」の不具合というより「/dev/input/event7」が常にマウスデバイスとは限らない事に今更気づいたのでマウスのボタン機能一時封印。
→「kanfont」「kantray」共にシングルボタンマウスで操作できるようになってます。つもりです。
→前回の入力テスト「kbdmouseTkGTK.py」は「LTsv_gui.py」に統合。
→「kanzip」でzip→csv→tsv処理中の都道府県アイコンは「LTsv_gui.py」で取り急ぎ作ったので雑。」
フレア「簡単に言うと「L:Tsv」と「kantray」が合体して「LTsv9kantray」に。」
ミユ「正確には「kantray」以外のアプリ例えば「kanfont」の中に漢直鍵盤を組み込めるように鍵盤をGUI化。」
シルキ「都道府県アイコンはもうちょっとちゃんとしたツールで描き直させて。」

ミユ「「LTsv_gui.py」よりはちゃんとした描画ツール「kanfont」の使い方を説明。「kantray」の鍵盤操作も同じなので同時に説明。

シルキ「1画面アプリはすごくわかりやすい。」
フレア「いやいや「FontForge」よりも簡素ってだけで描画の挙動は説明しないと。
点の無い場所でクリックすると点の追加。点は設置後もドラッグで移動可能。
点をクリック、正確には点を移動しようと動かしたけど結局移動させなかった場合、点の削除。」
ミユ「「move & remove」と覚えると簡単。」
フレア「線の分割みたいな大事な機能が欠けているので点を移動するつもりだったのに間違って消すとほぼ描き直しになるそこだけは注意。
つかマウス右ボタンを移動専用、中ホイールでレイヤ移動、中クリックで移動、と削除を違うボタンに」
ミユ「マウスデバイスを自動判定する方法が見つからない以上、マウスボタン数に依存せずGUIイベントのみでクリックを拾うしか。」
シルキ「readmeに書いてないけど「活」の項目をコピペして別の文字にSVGパスを貼り付ける事も可能。
「活」の項目はSVGパスだけど「kanfont」では「M(座標の絶対値)」と「z(パスの終了)」しか対応してないから、「Incscape」のパスは直接扱えない。

M moveto 座標 (x, y) から新たな部分パスを開始させる。 M(大文字)の後には絶対座標が続く。
z closepath 現在の部分パスの始点まで直線を描き、部分パスを閉じる。

SVG 1.1 仕様 (第2版) 日本語訳 パス – SVG 1.1 (第2版)


ミユ「「kanfont」で曲線扱えるようにするのは今後の課題。」
フレア「readmeにも書いてるけど、「ドーナツ状の図形を作る時には右回転(青)と左回転(緑)のポリゴンを重ねます」これ大事。
二次元のポリゴンにも裏と表があり、座標の時計回り反時計回りみたいなのを実は「FontForge」が要求していた。
それ知らないと「FontForge」で重ねて描いたパスが消える場合と消えない場合があるみたいな事態に。

よく見ると回転方向を表示する矢印ちゃんとあったし。

角度そのものではなく角度差の符号を求めればよいので, 逆三角関数を使う方法よりも簡単で優れた,外積を使う方法を紹介します.
S ≡ (Px - Cx) * (Qy - Cy) - (Py - Cy) * (Qx - Cx)
S>0 なら左回り,S<0 なら右回り,S=0 ならば C,P,Q は一直線上にある.なお,この判別方法は,CP と CQ が同じ長さである必要はない.

noocyte のプログラミング研究室 3点の座標から簡単に角度と回転方向を求める.(2・3・N次元,外積を用いる方法)

FontForge では外側の輪郭線はすべて時計回りに、内側の輪郭線はすべて反時計回りでなくてはなりません。
外側を時計回りにするということを忘れた場合は、エラーはもっと軽微なものですが、グリフをラスタライズする必要が生じた時にあまり愉快ではない結果が得られるでしょう。

FontForge 文字 "o" の作成――矛盾の無いパスの向き


ミユ「細かい話すると数学的には8の字図形でも裏表の面積が広い方に寄せるみたいなルールがあるらしいけど、

速度においては劣りますが、多角形に自己交差があるかもしれない場合には、負の値が返ってくることもあるように設計してある多角形の面積計算を用いて、
面積が、正の値なら、ループは反時計回り(もしくは、反時計回りの部分の方が時計回りの部分より大きい)
面積が、負の値なら、ループは時計回り((もしくは、時計回りの部分の方が反時計回りの部分より大きい)
面積が、ゼロなら、ループは潰れている(もしくは、時計回りの部分と反時計回りの部分の大きさが等しい)と判定します。

hiramine.com 多角形のループの向き

「kanfont」では面積計算はやらない(符号のカウントのみ)ので紫の図形の扱いに注意。「FontForge」にも独自のジャッジルールあるはずなので注意。」
シルキ「フォントだと交差する図形は通常は使わないので大丈夫だよ。」
フレア「WindowsTkinter(Python付属)は漢字をジャッジしてくるので「kanfont」のデータが壊れる怖れについて。

Pythontkinter.Entry に入力した内容を取り出そうとすると、こういう例外が出る文字がある。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 0: invalid continuation byte
基本多言語面にしか対応してないのか、Tcl。

tkinterでは基本多言語面しか使えない - かせきのうさぎさん

基本多言語面(きほんたげんごめん、英: Basic Multilingual Plane, BMP)は、ISO/IEC 10646の第0群第0面およびUnicodeの第0面。
最初の65536の符号位置である0000〜FFFFからなる。UCS-2は、BMPのみからなる。また、Unicode 3.0までのUnicodeは、BMPのみからなっていた。
UTF-16では、2オクテットで符号化される。

基本多言語面 - Wikipedia


ミユ「Windows基本多言語面の対策については後半で作戦発表。」

シルキ「とにかくフォントが描けたら「kanchar.tsv」と「kanfont.svg」に保存。
「kanfont.svg」を直接「FontForge」に読み込ませます。「Incscape」を使う工程一切ナシ!

フレア「2択出てますね。「kantray5x5comic」と「kantray5x5comic_w624」。」
ミユ「「FontForge」で「widths」記述子を認識させる方法が分からなかったので幅1024の全角フォントと幅624の半角フォントを「kanfont.svg」内で定義しています。

'widths' (記述子)
これはグリフ幅 に関する記述子である。 値に続けて,一つ以上のグリフ幅を指定し,それ をカンマで区切ったリストにしたものが値となる。
この記述子を使用する場合,'units-per-em'記述子も使用しなければならない。

Cascading Style Sheets, Level 2 Fonts


シルキ「「Incscape」で作るSVGと違って「Fontname」「Family Name」「Name For Humans」の項目にちゃんと「kantray5x5comic」が最初から入力されてる。

無印1024(全角)を読み込んでから624(半角)をマージ(Merge)。


全角に半角をマージできたらたらGenerateFonts。

フレア「「kantray5x5comic.ttf」はまだ一部の文字しか対応してないけど「kanmap.png」に描いてある「kantray5x5」はフォント化予定。
とか言いつつ「kanmap.png」自体がいつもの未完成。

シルキ「現バージョンは『「ツ・サ・ソ・ヒ・コ・ミ・モ・ネ・ル」が今だにドット絵書いてる途中です。』ってreadmeにも書いてるのになんで晒すの?」
フレア「「kanzip」の都道府県アイコン曝すよかマシかと」
ミユ「「kanfont」とは別途絵を描くツールも作って「L:Tsv」の描画ライブラリも強化する予定。ツールの問題。」
フレア「「kanmap.png」のα鍵盤が白いのは「kanmap.tsv」がまだまだ未完成という理由も。
くぬぎ圧縮前:椚橡栩椢椪椡檪櫟櫪桾檞㓛
くぬぎ圧縮後:椚橡栩椢椪椡檪櫪桾檞㓛
みたいに例えば「櫟」は「檪」の異体字だから、「櫟」を字引入力に。
これと同じ事をとりあえず「α」鍵盤に施して今「β」のところにあるクエン酸(枸櫞酸)とか「α」を空けたスペースに詰めてもらう予定。
先に人名漢字の異体字とかを字引入力に圧縮してスペース空けるのが優先順位だけど。」
シルキ「簡単に言うとα〜λ鍵盤大席替え祭り。」

ミユ「Windowsというか「Tkinter」で漢直用にキーフック方法が不明&BMP基本多言語面外(0xffff以上)文字が表示できないので対策について。」
レクィド「ドン!ドルルルルルルルルルゥ…シャキーン(ボイパドラムロール)」
フレア「半角カナで思い出したけど、単漢字辞書の「逆」に「半角カナ」突っ込んだので字引入力(「字引鍵盤←new!!」)で「オーバーロード」でも「スーパーウルトラハイパーミラクルロマンチック」でもSandS(スペースキー親指シフト)で打ち放題。

Windows(Tkinter)だと[NEFR][Space][XFER][KANA]を使う漢直入力ができない。」
ミユ「プラン1。漢直鍵盤を搭載したメモ帳みたいな「kanedit」を作る。問題点としてテキストエリアそのものを「canvas」で作れるのとか「canvas」を後からサイズ変更できるのかとか全く調査していない。
プラン2。逆にVimEmacsといったエディタ内蔵のスクリプト言語に移植。問題点としてエディタ毎のスクリプトを覚えるリソースなんてある訳無い。VimPythonが動くならぐらいの認識。
プラン3。漢直タイピング練習ソフト「kanfast」を作る。「kantray5x5comic」を開発したのはこの布石。
Tkinter」で基本多言語面BMP外の文字が表示できない問題が入力キーフック以前に話にならない。ので先にフォントを使わず文字を表示する所から。」
シルキ「フォント作ったのにフォントを使わない謎。」
ミユ「「Tkinter」の文字化けエラー(文字化けすら起こらずエラー発生)を回避するには文字を直接描画せずポリゴン図形として表示すれば良い。「kanfont」「kantray5x5comic」からの「kanfast」はそういう布石。」
フレア「魚の名前を漢直タイピングしていく鬼畜ステージ搭載の予感。」