それとなく作り始めたので、誰にともなく進捗報告です。
最近、色んな事をやらなきゃやらなきゃと思いすぎ、何一つまともに手をつけられていなかったので、この縦書き計画から片付けることにしました。
やっとこさ、文章の過多にかかわらずページを生成でき、ページ送りも実装できるようになったので、作り始めたのですが…..
けっこう大変ですね。ページの基準点を変更するのに苦戦しました。一応、Flash IDEのクラスをFlexでも扱えるようにするためのライブラリfl.* package.swfというものがあったので、それを使ってことなきを得ましたが、ActionScript3.0はMatrixをうまく使えないと困りますね。高校のときに数学3・Cやっといてよかった!
さて、今回はこんな感じになりました。毎回WordPressの投稿内にFlashを入れるのがメンドイので、デモ用の別ページを用意しました。
達成したこと
今のところ、こんなことができるようになっています。
- WordPressのデータベースからXMLRPC経由でコンテンツの取得
- ブラウザのサイズに応じてSWFが自動的に幅・高さを最適化(まだちょっと未完成ですが)
- 方向キーでページ送り
- 文章のサイズが変わっても大丈夫
- ユーザのパソコンにインストールされているフォントを調べて、いいのがなかったら=MS P明朝orさざなみ明朝しかなかったらヒラギノ明朝 Pro W3を読み込み(5MBあります)
- Javascriptからのアクセス(デモの下にあるテキストボックスに入力した値がSwf内に表示されます)
あと、これは実装面の問題なんで、読者はどうでもいいと思いますが、たぶん実現できるであろう機能です。
- ウィンドウサイズ変更に伴う、ページの再描画(改ページ位置が変更するので、ページを作り直す)
- フォント・フォントサイズ・行間などを選べるようにする
- 指定したIDの投稿を表示できるようにする(読み込んだXMLを変更して、ページを作り直す)
とまあ、色々とまとまってきました。が、もちろん懸案事項もあるわけです。
懸案事項
まず、非常に重要な問題として、ページにマスクをかけられないという問題です。
これができないと、ページめくりができないんですよねえ….. TLFの仕様というのは、「おまえが10ページ目でおまえが11ページ目だ!」という具合に、DisplayObjcetをコンテナに指定するというものなんですが、このコンテナにmaskを指定しても、テキストにマスクがかからないんです。コンテナに入ってる他のオブジェクトにはかかるんですがね。
そもそも、コンテナに入れられたTextFlowはgetChildでは取得できない曲者です。これは僕のマスクに対する理解が浅いせいもあるかもしれないので、もうちょっと勉強します。
続いて、どの文字までサポートするかです。
一応、TLFにはtcyタグというものがあり、これすなわち縦中横なんですが、どこまで縦に起こすか、です。
デモをごらんになっていただければわかるんですが、そもそもⅠは全角文字のはずなのに、寝てしまっています。この犯人捜しをしないことには、正規表現のルールが立てられません。
WordPressを使うので、UTF-8であるということだけは決められるんですが…… これも要調査。
最後に、WordPressとの機能分担です。ざっと考えても、これだけの悩みがあります。
- テンプレートタグを記入したページに縦書きを適用するか? それともカテゴリーまたはタグベース? その全部?
- WordPressの魅力である「デザイン性の高いテーマ」にどれだけ対応させるか? Flash内のデザインも管理画面から変えられるようにするか? だとしたら超面倒臭い!
- XMLRPCを使うか? それとも、一度出力した投稿をJavascriptで引っこ抜いてFlashに渡すか? でも、それだと正規表現エンジンがしょぼくなってしまわないか? Flashに解析させるか?
- そもそも管理画面を作るのが大変。PEARのHTMLクイックフォームと同じような感じだけど、基本面倒。
とまあ、こんな悩みを抱えています。コツコツとWordPressのCodexでプラグイン開発の文書を翻訳しているので、がんばって作ります。文学フリマへの参加も決定し、また忙しくなるので、とっとと片付けたいですね。しかし、管理画面のカスタマイズ方法が文書化されているCMSというのも、ありがたいものですね。
追記
最近、夢日記をつけることにしました。iPhoneからブログ投稿というモダンな手法でやってみます。安部公房は枕元のテープレコーダーに吹き込んでいたそうなので、それの現代版といった感じでしょうか。