« 2006年02月 | Main | 2005年11月 »

2005年12月30日

RSS に shape="rect"

以前のエントリに書いたように 1.0.5 ではハイパーテキストタグ に tidy_html 属性を使っていると "shape=rect" 属性をリンクタグに加えられてしまうバグを修正したそうだが、これが再発してしまっている。

続きを読む

2005年12月28日

2005年12月12日

Thingamablog + HaloScan + .Mac の課題

テンプレートをもっとブラッシュアップするためにパラノイア的に色々試しているのだが、色々改善すべき点がある。正しい HTML や XHTML を出力するだけでなくアクセシビリティとユーザビリティをより向上させるために必要な事柄を列挙してみる。

続きを読む

2005年12月11日

Mac_Stripe-XHTML_Strict-ja に不備がありました

昨日リリースしたテンプレート & CSS セットはミスで古いものをアップロードしていました。コメントで教えてもらい結構慌てました。どうやらリリース版を作成するスクリプトを書き換えた際にミスをしていたらしい。このエントリの公開前にダウンロードした人はもう一度ダウンロードしてください。

続きを読む

2005年12月10日

Hypertext タグの置換設定の使い方

1.0.4 から Hypertext テンプレートタグで置換設定ができるようになったのはエントリ「1.0.4 がもう出た」で述べた。What's New でも簡単に解説されているが、Thingamablog で所謂「Read More」を実現する方法も交えて突っ込んだ使い方を説明する。

続きを読む

2005年12月04日

tagsoup カスタム版

主旨

Thingamablog 1.0.3 以上で Hypertext テンプレートタグに limit_length, tidy_html を使用するか、使用しなくても RSS 中では日本語などの非 7bit 文字が実体参照にされてしまう現象を抑えるために tagsoup のカスタムバージョンを配布します。

ダウンロード

次のリンクからダウンロードしてください。

tagsoup-1.0rc3-OKAMURA.tar.gz (40KB)

このアーカイブの中には次のファイルが入っています。

  • LICENSE

    ライセンスを記載したファイルです。オリジナルのものと同じです。

  • README.txt

    カスタムバージョンの簡単な説明を書いています。

  • tagsoup-1.0rc3.jar

    カスタム版本体です。

  • tagsoup-1.0rc3.patch

    オリジナルのソースからカスタム版のソースを生成するためのパッチファイルです。

オリジナルは TagSoup home page から取得できます。

使い方

Thingamablog に入っている tagsoup-1.0rc3.jar をこのカスタム版の tagsoup-1.0rc3.jar と置き換えます。次の手順で行います。

  1. Thingamablog を起動していたら終了させる。
  2. Thinamablog をインストールしたディレクトリ直下の lib ディレクトの tagsoup-1.0rc3.jar を tagsoup-1.0rc3.jar.org としてバックアップする。
  3. tagsoup-1.0rc3-OKAMURA.tar.gz の中の tagsoup-1.0rc3.jar を Thinamablog をインストールしたディレクトリ直下の lib ディレクトにコピーする。

次回から Thingamablog でカスタム版が使用されるようになります。

ソースはみつかった

先のエントリ「org.ccil.cowan.tagsoup の情報求む」でドキュメントを探していた org.ccil.cowan.tagsoup パッケージだが、ドキュメントはなかったのだがソースはあった。

なんと、そのソースを読むと非 7 bit の文字は問答無用で実体参照にしていた。org.ccil.cowan.tagsoup を使う限りどうしようもないというわけだ。

そうなると取るべき手段は次のどれかだろう。

  • org.ccil.cowan.tagsoup のソースを書き換えて実体参照化を防ぐ。
  • org.ccil.cowan.tagsoup に変わる別なパッケージを使う。
  • 終了タグの欠落を補うコードを自前で書く。
  • 諦める。

どれにしようかなあ。

追記

全くどうしようもないというわけでもなさそうだ。ソースを読むとテキスト部分を CDATA としてしまえば実体参照にはならなように見える。しかしエントリを書くのに全てのテキストを <![CDATA[]]> で挟むのはいくら僕でも苦痛だ。Thingamablog 内で一時的に付けて外すというのも面倒だ。というよりもそれができるのなら終了タグの欠落を補うコードを自前で書いた方が遥かにましだ。

org.ccil.cowan.tagsoup の情報求む

エントリ「1.0.5 の RSS がおかしい」で述べた RSS において EntryBody の日本語が実体参照になる原因を調べた。

net.sf.thingamablog.generator.HyperTextTag クラスの tidyHTML メソッドを通すと日本語が実体参照になってしまう。そのメソッドでは org.ccil.cowan.tagsoup.XMLWriter クラスと org.ccil.cowan.tagsoup.Parser クラスを使って、HTML を整形している。

この整形は必要なものだ。RSS で各エントリの内容を全ては書かない設定(デフォルトではそうなっている)にしているとエントリの内容が切られるのだが、その際に開始タグがあるのに終了タグがない状態になってしまう。これを補正するためのものだからだ。だから外すわけにはいかない。

また encode_html="1" を付けているときに実体参照 &#NNNN; の & が &amp; になってしまうのは、上の tidyHTML で実体参照になった後に HTML 予約文字を実体参照にしているからである。しかしこの順序を逆にするわけにもいかない。なぜならば、HTML 予約文字を実体参照にしたあとではそれは既にただの文字であってタグ付けに意味がある文字ではないからである。tidyHTML で開始タグがあるのに終了タグがないということを認識できなくなる。

org.ccil.cowan.tagsoup のクラス群で実体参照にされてしまうのを防ぐことができれば全てはうまくいく。そうしようと org.ccil.cowan.tagsoup のドキュメントを探したのだが Google ても見つからないのだ。org.ccil.cowan.tagsoup のクラス群のドキュメントはどこにあるのだろう?

いっそのこと作者に投げちゃおうかな。

2005年12月03日

1.0.5 の RSS がおかしい

1.0.5 を試してみてどうも RSS がおかしい。

feed.template の item 要素の中の description で EntryBody テンプレートタグを使うわけだが次のようになってしまう。

feed.template 内での EntryBody の属性と結果
指定した属性 HTML タグ 日本語
(無指定) そのまま 実体参照になる
strip_html="1" なくなる 実体参照になる
encode_html="1" HTML 予約文字が実体参照になる 実体参照にした上で、& が &amp; になる。
close_empty_tags="1" そのまま(若干修正されるケースあり) 実体参照になる
tidy_html="1" そのまま(若干修正されるケースあり) 実体参照になる

つまり属性の処理とは関係なく日本語が実体参照にされてしまっている。このこと自体も凄く嫌だが、encode_html 属性と組み合わせると悲惨なことになる。UTF-8 を使用している場合、3 バイトの日本語文字が、実体参照になって 8 バイトくらい、更に & が実体参照にされて 12 バイトくらいになってしまうからだ。

因に EntryBody テンプレートタグを feed.template 内で使用するときに strip_html="1"encode_html="1" も指定しないときは <![CDATA[<$EntryBody$>]]> と書かないとならない。そしてエントリのソースに ]]> と書くようなことはしてはならない。

2005年12月02日

Mac_Stripe-XHTML_Strict-ja を 1.0.5 に合わせた

Thingamablog 1.0.5 に合わせて日本語用の XHTML 1.0 Strict のテンプレートと CSS のセット Mac_Stripe-XHTML_Strict-ja を更新しました。

変更主旨は次のとおりです。

  • Thingamablog 1.0.2-OKAMURA-20051102 へのリンクを外しました。

    1.0.3 でこのカスタム版の修正/変更が全て取り込まれたので、純正 Thingamablog を使えば十分になりました。このカスタム版役目は終了しました。

    これにより TemplatesDir カスタムタグは使用されなくなります。

  • エントリページの BlogEntry コンテナの使い方を自然にした。

    1.0.2 まで BlogEntry コンテナを複数箇所で使用すると、それぞれにエントリの内容が書き出されてしまうバグがありました。これに対応するため HTML ヘッダからボディにわたって BlogEntry コンテナで囲って BlogEntry コンテナを無理矢理一つだけ使うようにしていました。

    そもそも BlogEntry コンテナを複数箇所で使いたかったのは次の理由からです。

    • オリジナルにある title 要素内の <$PageTitle$> の代わりに <$EntryTitle split_html="1"$> を使いたかったから。
    • meta 要素によるそのページの著者の提示に <$EntryAuthor$> を使いたかったから。
    • meta 要素によるそのページの著作権提示に <$EntryDate format="yyyy"$> を使いたかったから。
    • link 要素によるそのページの著者へのバックリンクの提示に <$EntryAuthorEmail mung="1"$> を入れたかったから。
    • オリジナルにあるバナー内の <$PageTitle$> の代わりに <$EntryTitle$> を使いたかったから。

    最初と最後の項目は次の変更主旨に関連します。

  • エントリページで <$PageTitle$> がエントリのタイトルとして機能するようになったので活用することにした。

    これも 1.0.3 で解消されたバグです。そういう仕様だと思ってバグとは思っていなかったのですがバグだったそうです。

ダウンロードはエントリ「Mac_Stripe-XHTML_Strict-ja」からどうぞ。

1.0.5 を試してみた

もういい加減にアップデートしないとと思い 1.0.2 から 1.0.5 に Thingamalog をアップデートしてみた。テンプレートもそれに合わせて改造する必要もあるし。

設定パネルが開かない

ところがダウンロードした1.0.5 を起動してブログの設定パネルを開こうとしても開かない。メニューからやってみても開かない。これは段階を踏んでやらないといけないのかもしれないと思い、以前ダウンロードしておいた 1.0.3 を起動して設定パネルを開いてみた。1.0.4 はダウンロードしていなかったから飛ばして、もう一度 1.0.5 を起動して設定パネルを開こうとしたがやっぱり駄目だった。

これはデバッグが必要かなと思いながら、取り敢えずソースから一式をビルドした。ビルドしてできた thingamablog.jar を使ってみたらあっさり設定パネルが開いた。

Mac OS X ユーザはもしかするとダウンロードしたバイナリでは同様のことが起るかもしれない。もし起きたらソースからビルドしてみるとよい。希望があればそのやり方をエントリにするので、ビルドの仕方がわからない人はコメントで知らせてほしい。Mac OS X ならば簡単にできる。

カテゴリの RSS を生成するときは

1.0.3 からカテゴリ毎の RSS を生成できるようになり、RSS の拡張子を選択する設定ができるようになった。この拡張子のデフォルトは .rss になっている。しかし、この拡張子では大抵の web サーバは MIME タイプを text/xml などにはしてくれないだろう。

だからカテゴリの RSS を生成する人は拡張子を使っている web サーバに合わせて変えるか、web サーバの設定を変えるかをする必要があるケースが多いだろう。メインの RSS に合わせておくのがよい。