w3m 最大の難所、 html parser の整理に手をつけた。
とにかくでかい。 だいぶ 削った(frame 機能を削除するとか)のだが、 それでもまだ 7000 行とかあり、 1000行規模の関数があったり。
とくに table が難解。 table の cell 内だけ、パースがネストしている?
global 変数退治
完了。 たぶん、reentrant 可能。
ロジック
2パスで動作していて、 一回目で指定したカラム幅に分割しながら、 解釈した内容を html 風の文字列に再エンコーディングして 、文字列のリストに格納しているぽい。 あとどうも木構造の構築はやってなくて、項目ごとに stack で on/off を追跡しているようだ。
二段階目で文字列のリストを走査して、 tui 向けに row/col と属性を考慮した行形式に出力している。 plain な文字列と、属性配列の二本建て。 正規表現による文字列検索があるので plane な HTML tag の除去された文字列も必要。 なので、この段階で term 向けの cell 構造化しない。
table
table に入るときに環境をリセットいて、パーサーを再起動しているぽい。