12/24/2010

[note] 今更Word doc formatのパーサを

試作した。誰もが使ってるマイクロソフトのアレ、しかもbinaryですよ。いや、今こそこそ私的に作ってるツールに読み書きの機能を付けようと思ったのが運の尽きです。

着手してから約一月、テキストと各種プロパティを読み出して、インデントとか反映して表示する所まで正常に動作するライブラリが一応出来たので、一息ついてるわけですけども。

しかし何なのこの複雑怪奇なフォーマット。ただでさえ大きい難物なのに、さらに記述がバラバラで理解しづらい事この上ないドキュメント。泣きそうでした。軽い気持ちだったのに。複雑なフォーマット構成自体は多分にデータ量の節約のためであろうので仕方ないのだけれども、ドキュメントの書き方についてはもうちょっと何とかならんかったのかと。誰だ英語圏の技術文書は論理的で読みやすいとか言ったのは。嘘つき。ええ。私が甘かったんですよ畜生め。

docファイルには、まずFAT,mini-FATのセクタチェーンとその上のディレクトリ構造からなるファイルシステムもどきのデータ格納用のラッパ構造があって、データの中身はその中にあって、んでその中にDocumentとTableの二種のStreamとがあって、ヘッダから各種のデータ、属性パラメタとかが種類毎にツリー状になってて、それぞれのツリー中にはテキストの範囲とかセクションとかパラグラフとかの種類単位でぶつ切りにしたデータのリストがあって。そのリストの各要素はStream中にある実体へのポインタを持ってて、実体はそのポインタを使ってStreamから読み出して、原則テキストの範囲別にマージするとドキュメントデータが出来上がる、という至極簡単な構成を理解するのにも殆ど全ドキュメント、てか初っ端のラッパ構造の所から別ドキュメントだったわけだけれども、それも含めて読み解く必要があったし、各種のデータブロック自体も殆ど同じ構成なのに微妙にアドレスや長さ、要素数の計算方法が違ってたり、社外で使いにくくするためにわざとやってんじゃねえのかと思うような糞規格、糞文書。そりゃバグも出まくるだろうし、世間からは叩かれるだろうし、排除したくもなるわ、と心底納得した次第です。

まあもう済んだことですけどね。あー疲れた。片手間でやってたにしても、数日で終わる予定だったのに。反省が必要かな。やってから言うのも何ですが、こんな先のないフォーマットにいつまでも関わってられないのですよ。まあでも一応終わらせられたのでよしとしますかね。最悪途中打ち切りも考えた位で、それよりは遥に良い所に着地出来ましたから。