xfy.memo

xfy technology についての備忘録です。

2006 年 11 月のアーカイブ

2006 年 11 月 26 日 連続する空白類文字の扱いについて

xfy Personal Client の XHTML ボキャブラリコンポーネントについて調べていたところ、空白類文字周りで不思議な現象に出くわしました。

正しい (と思われる) 空白類文字の扱い

下記の XHTML 文書を xfy Personal Client で表示すると、

<?xml version="1.0" encoding="utf-8"?>

<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <p>0123456789abcdef</p>
    <p>0             ef</p>
    <p>01             f</p>
  </body>
</html>

パラグラフ中の連続する空白類文字は一つにまとめられて表示されます (= XHTML + CSS 的に正しい挙動)。

スクリーンショット (PNG 形式、約 40KB)

正しくない (と思われる) 空白類文字の扱い

が、例えば 2 番目のパラグラフ中の文字 e を削除すると……、

スクリーンショット (PNG 形式、約 40KB)

一つにまとめられていた空白類文字が復元 (?) してしまいます (= XHTML + CSS 的に正しくない挙動)。

スクリーンショット (PNG 形式、約 40KB)

同様に、 3 番目のパラグラフ中の文字 1 を削除すると……、

スクリーンショット (PNG 形式、約 40KB)

やはり、一つにまとめられていた空白類文字文字が復元してしまいます。

スクリーンショット (PNG 形式、約 40KB)

2006 年 11 月 27 日 xfy Personal Client で XHTML 文書を編集すると、連続する空白類文字が別の文字に置換される ?

xfy Personal Client の XHTML コンポーネントの不思議な挙動について、さらに調べてみました。どうやら XHTML コンポーネントは、文書が編集されたタイミングで、文書中の空白類文字を別の文字に置き換えてしまうようです。

試したこと (その 1)

まず、下記の仮説の下、 XHTML 文書のレンダリング結果が変わるかどうかを調べてみました。

仮説
  • XHTML コンポーネントの HTML レンダラは、 CSS の white-space プロパティ (デフォルト値: normal) を正しく解釈できていないのでは ?

  • それを回避するために、 XHTML 文書を読み込んだタイミングで何らかのレンダリング修正処理を加えているのでは ?

検証方法
  1. サンプル文書 (先のエントリーで挙げた XHTML 文書) を xfy Personal Client で読み込み、

  2. 編集し (= 一つにまとめられていた空白類文字が復元される)、

  3. 上書き保存した上で、

  4. 再読み込みする。

これで XHTML 文書が正しく表示されれば、文書の読み込み時に何らかのレンダリング修正処理を加えていると見なせます。

結果
  • XHTML 文書は正しく表示されない (= 復元された空白類文字はそのまま)。

    スクリーンショット (PNG 形式、約 48KB)

  • 上書き保存した XHTML 文書中を <oXygen/> (XML エディタ) で確認したところ、文書中の空白類文字が「no-break space (&#xa0; で参照される文字)」と「空白 (&#x20; で参照される文字)」とのペアに置き換えられていた。

    スクリーンショット (PNG 形式、約 84KB)

というわけで、 XHTML 文書を読み込んだタイミングで何らかのレンダリング修正処理を加えているわけではなく、文書の編集後に文書中の空白類文字を別の文字に置き換えているようです。

試したこと (その 2)

次に、どのタイミングで XHTML 文書中の空白類文字が別の文字に置き換えられているのかを調べてみました。

仮説
  • XHTML コンポーネントの挙動からして、 (文書が保存されたタイミングではなく、) 文書が編集されたタイミングで、文書中の空白類文字が別の文字に置き換えられているのでは ?

検証方法
  1. サンプル文書を xfy Personal Client で読み込み、

  2. ソースをクリップボードにコピーし、

  3. その内容を <oXygen/> で確認する (これをサンプル文書 (対照区) とする)。

  4. さらに、サンプル文書を編集し (= 一つにまとめられていた空白類文字が復元される)、

  5. ソースをクリップボードにコピーし、

  6. その内容を <oXygen/> で確認する (これをサンプル文書 (実験区) とする)。

結果
  • サンプル文書 (対照区) 中の空白類文字はそのまま。

    スクリーンショット (PNG 形式、約 84KB)

  • サンプル文書 (実験区) 中の空白類文字は、 no-break space と空白とのペアに置き換えられていた。

    スクリーンショット (PNG 形式、約 84KB)

というわけで、 XHTML 文書が編集されたタイミングで、文書中の空白類文字が別の文字に置き換えられていることがわかりました。

まとめ


Powered by Movable Type 3.2-ja-2

Copyright © 2005, 2007 Shin All rights reserved.