* pre 要素型 (HTML, XHTML 1) [1] [DFN[[CODE(HTMLe)[pre]] 要素]]は、囲まれた文が [Q[[RUBYB[整形済み] [preformatted]]]] であることを[[視覚UA]] に伝えます。 [9] 仕様書: - [[HTML 2.0]]: [[RFC 1866]] 5.5.2. Preformatted Text: PRE - [[SI 4281]]:1998 -- [CSECTION[6.1.1.2 Pre-formatted segments]] - [[HTML 4]] -- -- [[厳密DTD]] -- [[移行用DTD]] - [[XHTML 1.0]]: [2] :[[名前空間名]]:[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] :[[局所名]]:[CODE(HTMLe)[pre]] :[[開始タグ]]:必須 :[[終了タグ]]:必須 :[[内容模型]]:[CODE(SGML)[(%[[inline]];)* -([VAR[除外要素型]])]] :出現できる文脈:[CODE(SGML)[%[[block]];]] な文脈 (歴史的変遷 ) :[[属性]]: ,属性名 ,属性値 ,既定値 ,説明 ,出典 ,[CODE(HTMLa)@en[[[align]]]] , , ,揃え ,[HTML4] 非推奨 ,[CODE(HTMLa)@en[[[autohilite]]]] , , , ,非標準 ,[[Microsoft]] ,[CODE(HTMLa)[[[class]]]] , , ,[[級]] ,[HTML4] %[[coreattr]] ,[CODE(HTMLa)@en[[[cols]]]] , , , ,非標準 ,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,[HTML4] %[[i18n]] ,[CODE(HTMLa)[[[id]]]] , , ,一意識別子 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,[HTML4] %i18n ,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML1] ,[CODE(HTMLa)[[[onclick]]]] , , , ,[HTML4] %[[events]] ,[CODE(HTMLa)[[[ondblclick]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeydown]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeypress]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeyup]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmousedown]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseout]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseover]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseup]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[_moz_quote]]]] , , , ,非標準 ,[[Mozilla]] ,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[title]]]] , , ,注釈的題 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[width]]]] ,[CODE(SGML)[[[NUMBER]]]] ,(自動) ,幅 ,"[HTML 2.0], [HTML 4] 非推奨" ,[CODE(HTMLa)@en[[[wrap]]]] , , , ,非標準 ,[CODE(XMLa)[[[xmlns]]]] ,[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] ,== ,[[W3C]] [[勧告]] ,[[XHTML 1]] [[#comment]] ** 内容模型 [4] 内容としては、基本的に[[行内要素]]を持つことができますが、 - [CODE(HTMLe)[[[img]]]] * - [CODE(HTMLe)[[[object]]]] * - [CODE(HTMLe)[[[applet]]]] - [CODE(HTMLe)[[[big]]]] * - [CODE(HTMLe)[[[small]]]] * - [CODE(HTMLe)[[[sub]]]] * - [CODE(HTMLe)[[[sup]]]] * - [CODE(HTMLe)[[[font]]]] - [CODE(HTMLe)[[[basefont]]]] は除外されています ([[子孫要素]]とできません)。 HTML 4 によれば、この規定は [[HTML 3.2]] と同じで、 固定幅フォントでレンダリングしたときに行の高さと文字の進み幅が一定になるようにするための制約なのだそうです。 [[XHTML 1.0]] にもこの制約は受け継がれています [SRC[XHTML 1.0 ]]。 ただし、 [CODE[*]] をつけた要素にしか言及されていません。 残りの移行用要素型はどうでもいいってことですか。 (XHTML 1.0 にも Transitional DTD はあるのにねぇ。) [5] >>4 の目的の達成のためには、 >>3 の bidi についての規定が邪魔に思えるのですけどねぇ。 [13] [CODE(HTMLe)[pre]] の内容には各種の[[行内要素]]が使えますが、 UA の性能によっては、正しくレンダリングされないことがあります。 [SRC[RFC 1866 5.5.2.]] 太字でレンダリングした部分で文字幅の計算がずれてまわりと字が重なるとか、 そんなような状況を想定しているのだと思われます。 [[#comment]] ** レンダリング [3] HTML 4 によれば、 - 視覚 UA は、 -- [[空白]]に手をつけなくてよい (may) -- [[固定幅]]フォントで文をレンダリングしてもよい (may) -- 自動語折り返し (word wrap) を無効化してもよい (may) -- [[bidi]] 処理を無効化してはならない (must not) - 非視覚 UA は、余分な空白を尊重する必要はない (not required) [6] >>4 の除外要素があるのは、 固定幅フォントで表示したときに行の高さや文字の幅が一定になるようにするためです。 この動作を著者が[[スタイルシート]]で変えてしまうことは非推奨 (discourage) です。 [10] RFC 1866 では、 [CODE(HTMLe)[pre]] 要素は固定幅フォントで整形された文章に適当な要素型であると紹介していました。 RFC 1866 には明記こそされていませんが、 固定幅フォントでの表示が適当であると言っていることは自明です。 [11] UA は [CODE(HTMLa)[[[width]]]] 属性値を参考にして適当な文字の大きさと字下げの量を決めることができます。 [SRC[RFC 1866 5.5.2.]] 幅が広ければ左余白を削減するようなことを想定しているようです。 [16] [CODE(HTMLe)[pre]] の意味は[Q[整形済み文]]であって、[Q[固定幅]]ではありませんが、 歴史的事情を考慮すれば、非固定幅な整形済み文に使用するのは好ましくないでしょう。 [WEAK[(しかしそうなると、非固定幅な整形済み文に使用するべき要素型がなくなってしまいますが・・・。)]] [19] [CITE[pre 要素のスタイル定義とマークアップ - 2xup]] ([[名無しさん]] [WEAK[2006-09-07 00:02:14 +00:00]]) [[#comment]] *** 改行 [12] [CODE(HTMLe)[pre]] 内では、改行を改行 (次の行の先頭への移動) として扱います。 (表示領域の先頭ではなく、 余白を考慮した行の先頭です。) [SRC[RFC 1866 5.5.2.]] [14] 古い文書は [CODE(HTMLe)[pre]] の中で [CODE(HTMLe)[[[p]]]] タグを使っています。 UA はこれを改行と同じように扱うことが[RUBYB[推奨] [encourage]]されていました。 ただし、 [CODE(HTMLe)[p]] の後に改行が続く時には、 まとめて一つ分の改行とみなすべきとされていました。 [SRC[RFC 1866 5.5.2.]] [17] '''Bidi''': [[bidi]] に関しては、[[行]]ごとに bidi 算法を適用して各[[文字]]の表示位置を決定します [SRC[SI 4281 6.1.1.2]]。 [[#comment]] *** 水平タブ [8] [[水平タブ]]文字 ([CODE(char)[0/9]], [CODE(char)[HORIZONTAL TAB]], [CODE(char)[[[HTAB]]]]) を [CODE(HTMLe)[pre]] 内で使用することは避けるべきとされています。 HTML 2.0 (RFC 1866) では[Q[含める[RUBYB[べきではない] [should not]]]]、 HTML 4 では[Q[[RUBYB[強く非推奨] [strongly discouraged]]]]、 [[ISO-HTML]] では使用不能 (強制的に [CODE(char)[[[SP]]]] に変換) と、時代が下るにつれ強い表現になっています。 UA はタブを8の倍数の[[文字位置]]までの分の間隔として解釈しなければなりません。 しかし実装は一貫していません。 [SRC[RFC 1866 5.5.2.]] 多くの視覚 UA は、8文字を一タブ幅としています。 ところが、 [[editor]] でタブ幅を好きな幅にすることはよく行われています。 だから、変てこな文書を作ってしまうことになります。 [SRC[HTML 4]] [9] 多くのブラウザが8タブを採用しているのは事実で、 ブラウザに限らずとも8文字が優勢ですが、そうでなかったり、 設定で変えられる処理系も多々あります。 水平タブ文字は、数ある [[C0]] 制御文字のうちでは、文字自体はかなり安全に (ほとんど必ず) 伝達してもらえるわずかな文字の一つではありますが、 意図した通りに表示してもらえる確率はかなり低くなりますから、 この判断は妥当だと思います。 [[#comment]] ** 例 [15] 整形済み文の例 [SRC[RFC 1866 5.5.2.]] [PRE(HTML)[
Line 1.
       Line 2 is to the right of line 1.     abc
       Line 3 aligns with line 2.            def
]PRE] [7] Shelly の[[詩]]『To a Skylark』 [SRC[HTML 4]] [PRE(HTML)[
       Higher still and higher
         From the earth thou springest
       Like a cloud of fire;
         The blue deep thou wingest,
And singing still dost soar, and soaring ever singest.
]PRE] レンダリング例: [PRE[ Higher still and higher From the earth thou springest Like a cloud of fire; The blue deep thou wingest, And singing still dost soar, and soaring ever singest. ]PRE] [[#comment]] ** メモ [18] [[libwww]]は1992年12月11日の1.1版で、当時の[[HTML]]仕様に追加されたばかりの[CODE(HTMLe)@en[[[pre]]]]を実装しました。 ;; [CITE@en[Change History for W3C Sample Code Library]] ([[名無しさん]] [sage]) [20] [CITE[EMail Msg <9212141318.AA03936@www3.cern.ch>]] ([CODE[2007-07-02 21:30:38 +09:00]] 版) ([[名無しさん]]) [21] [CITE@ja[コードは
でマークアップするべき ...か? - Archiva]] ([TIME[2008-03-09 21:24:10 +09:00]] 版) 
([[名無しさん]])


[[#comment]]


* メモ