地道な作業により GC を除去することができた。
謎の GC_free クラッシュ
ftxui::component を導入したあたりから、 クラッシュするようになった。
HtmlParser 整理に着手
w3m 最大の難所、 html parser の整理に手をつけた。
ftxui のdom
tui 描画に ftxui の Screen を取り入れたが、 さらに dom もとり入れた。
リファクタリング構想
Windows で http get するところまでできた。 使用ライブラリーの構成が固まった。
co_await で非同期
c++20 の coroutine うまくいきそう。
msvc でビルド
Windows 版、cygwin でも mingw でもなく、msvc 版のビルドを試みる。
ftxui 導入
tui 描画に ftxui を取り入れる。
libuv
pty input, signal, timer を置き換える。
content-encoding
Content-Encoding 処理が input_stream と密結合だった。
funcmap
funcmap 改造。
tab と buffer
データ構造
global 変数をメンバー変数に変える
スレッドセーフにするべく global 変数をメンバー変数などに変えていきます。
だいぶシンプルになってきた
http get から html parse, term 表示までの流れができてきました。
proxy が難しい
openUrl 関数が難解なので、簡単にするために Proxy 機能を取り除くことにした。
非同期タスク
2種類の非同期タスクが必要で、 ひとつは http get、もうひとつは text 入力。
機能が壊れている
なるべく壊さないようにしていますが、 わりと壊れています。 忘れないように修復優先度をメモ。
Buffer分割計画
Buffer が大きいので役割ごとに分割してみる。
MD5 deprecated warning
MD5 警告が多くてメッセージが埋もれるのがつらいので対処を試みる。
network 整理
比較的に独立性の高い network 関連を整理する。
GC 管理の class
new を使えるようにする。
mainloop
いよいよ本格的な改造に踏み込みはじめる。 mainloop を分離した。
const char * との戦い
c++ 化した瞬間からものすごい量の警告が発生していて、
やむをえず -w
していました。
line editor を分離したい
main loop を libuv にする前に、 line editor を整理したい。
utf-8 以外も動くように
なんとか最低限の utf-8 対応ができてきた。
utf-8
と ISO-8859-1
が動くぽいので、
とりあえず SJIS
を utf-8
に変換して動くようにしたい。
謎の backend モード
謎というほどでも無いのだけど emacs など の editor 向けに、 キーボード入力などをオミットした別のモードのようだ。 使ったことないのと、裏口でコードが複雑化している感じがある。
描画の流れ
描画の流れとデータ構造
さらに減量
さらに減量
内部コードを utf-8 に
マクロを除去して libwc 回りを削除したため ASCII しか表示できなくなりました。
HTML は utf-8 で記述されているので、無変換で出力できれば表示されるはずの部分が、
??
となっています。
w3m の内部コードを素の utf-8 に変えることを試みます。
source と header をペアにする
巨大なヘッダー proto.h に大量の関数が詰め込んである。 fm.h に主要な型が詰め込んである。
typedef struct の除去
これからヘッダーを小分けにしていくのに、 前方宣言を使いたいのだけどその時に typedef に配慮が必要です。
C++化
C では多少型が違っても void*
や int
になってわりとコンパイルが通る。
関数 signature が無くてもコンパイルが通る。
C++ ではそうはいかない。
そこがいい。
マクロ削除
#ifdef
を確定しながらコードを減らしていく。
init
なんとなく最初からやりなおし。 長くなるので作業メモを作った。