2009-06-05

リストの文書構造

liの子要素に%inlineが書ける理由は何かで書いたとおり、htmlではliの下に直接インライン要素を書くことが出来る。

xhtml2ではどうなってるんだろう、とワーキングドラフトを見てみたのだが、やはり(PCDATA|Flow)*と書いてある(あれ、Flow(というかText)自体にはPCDATAが含まれていないのか)。たぶんこれは、liで囲んでいるという時点でインライン要素にはp要素と同じくらい十分な意味づけがされていると考えているのではないか。

DocBookはどうだったっけ、と調べてみたのだが、こちらはlistitemの下にはある程度大きな要素しか書けないようだ。いろんなところの例を見ても、<listitem><para>りんご</para></listitem>みたいに項目ごといちいちparaで囲ってある。これは、listitemは純粋にコンテナの要素としての構造のみを表していて、項目の中身については何も意味づけしないという立場を取っているのではないか。

で、この間からなんでこんなことで悩んでいるのかというと、次のようなWiki記法(軽量マークアップ言語)を解析して内部的な文書モデル(オブジェクト構造)を構築するとき、リストの一行目をParagraphの中に入れるかどうかが問題になるからだ。

次のはリストの例です。
-項目1です。
 改行''後''です。
 -入れ子の項目
 -入れ子の項目
 入れ子の後です。
 
 項目1の最後。上の行には先頭に1文字空白が入ってます。
-項目2です。

とりあえずParagraphに入れておいて、html出力するときにListItemの下にParagraphが一つだけならばpで囲まないで出力する、というような手もあるかも。別にすべてpで囲むのがそんなに悪いって分けでもないし。liの下にpを入れると、スタイル上無駄に間隔が空いてしまうことがあるけど、スタイルシートで調整すればいいし。

というわけで、上の例は次のように解釈することにする。

Document
  Paragraph
    ParagraphLine
      Text("次のはリストの例です。")
  UnorderedList
    ListItem
      Paragraph
        ParagraphLine
          Text("項目1です。")
        ParagraphLine
          Text("改行")
          Emphasis
            Text("後")
          Text("です。")
      UnorderedList
        ListItem
          Paragraph
            ParagraphLine
              Text("入れ子の項目")
        ListItem
          Paragraph
            ParagraphLine
              Text("入れ子の項目")
      Paragraph
        ParagraphLine
          Text("入れ子の後です。")
      Paragraph
        ParagraphLine
          Text("項目1の最後。上の行には先頭に1文字空白が入ってます。")
    ListItem
      Paragraph
        ParagraphLine
          Text("項目2です。")

ListItemの下にはTextやEmphasisが直接入ることはない。

2009-06-04

A列車DS

門前町の次の負の遺産はあっという間にクリアした。条件は二年連続黒字と子会社20社だった。最初に赤字路線も黒字路線も区別なく、ほとんどの線路と駅と子会社と土地をうっぱらう。そして右下の空いているところに駅を建てて、すでに発展しているところと結んで電車をガンガン走らせる。新しい駅のそばにはデパートを置いて、初年度から黒字になるような体勢を整える。二年寝かせたら森の近くにペンションを十数個建てておしまい。つまらん。A列車はミッションクリア型のゲームにしたらつまらないに決まってるんだ。

ここでフリーモードが選べるようになった。残りのミッションをやるかどうか迷ったのだけど、やっぱりフリーモードで遊ぶことにした。

うん、これだよこれ。一つの街を丁寧に、成長の余地が無くなるのを目指して育てていく。全ての土地を使い切ったときに、どこまで自分の思い描く良い街にできるか。

2009-06-04

CD

今日もamazonでポチったCDが届いた。

  • COCC-16250:マジ?マジ!マジカル☆ジュエル / 笑顔のループ
  • KICM 1277:キラリフタリ

笑顔のループ良い歌過ぎるヨ!

2009-06-02

liの子要素に%inlineが書ける理由は何か

htmlを書くときにたまに困るんだけど、

      <body>
        <p>変更点は次の通り。</p>
        <ul>
          <li>機能Aを削除した。</li>
          <li>
            <p>機能Xを追加した。具体的には次の変更を行った。</p>
            <ul>
              <li>X-1モジュールを修正した。</li>
              <li>新たにX-2モジュールを追加した。</li>
              <li>Yモジュールを削除した。</li>
            </ul>
          </li>
          ...
        </ul>

上の場合、機能Xの一文はpで囲むべきかどうか。bodyの下では囲んでいるのだから、ここでも囲みたくなる。囲むのであれば、機能Aのところも囲むべきだろうか。具体的な変更点を書いたli内もpで囲むべきだろうか。囲んだときと囲まないときの意味的な違いは何だろうか。

………考え中。

例えば、次のような場合はたいてい囲まないよなぁ。

        <ul>
          <li>リンゴ</li>
          <li>バナナ</li>
          <li>さつまいも</li>
        </ul>

「リンゴ」や「バナナ」はパラグラフではないということ? うん、きっとそうに違いない。で、パラグラフとそうでないものの違いって何? 「機能Aを削除した。」はパラグラフ? 「機能Aを削除」(体言止め)だったら?

2009-06-02

早寝早起き

目覚ましを午前6時にセットして昨晩は午後10時に就寝。今朝は5時15分起床。風呂に入っている間に目覚ましが鳴って困った。

やっぱり朝に余裕があるのは良いね。だらだらと遅くまで職場にいるのがダメなんだよ。さっさと仕事してさっさと帰るべきだね。遅く来る連中なんて気にするだけ損だよ。

2009-05-31

C++0x欲しい

最近C++でプログラムを組んでいると、C++0xの機能が欲しくて仕方がない。auto欲しい。この型、どこから持ってこよう……。あらかじめ全部のクラスのメンバとしてtypedefしておくのが一番簡単かなぁ(継承で)。面倒くさいなぁ。