* code 要素型 (HTML, XHTML 1)

[1] [DFN[[CODE(HTMLe)[code]] [[要素型]]]]は、計算機[RUBY[符号] [コード]]の[[素片]]を示します。

仕様書:
- [[HTML 2]]
-- [[HTML 2.0]] [[RFC 1866]]
- [[HTML 4]]
-- <IW:HTML4:"struct/text.html#edef-CODE">
- [[XHTML 1.0]]
-- DTD <IW:XHTML10:"dtds.html#dtdentry_xhtml1-frameset.dtd_code">
- [[XHTML m12n]]
-- 抽象モジュール <IW:XHTML1m12n:"xhtl-modularization.html#s_textmodule">
-- DTD 実装 <IW:XHTML1m12n:"dtd_module_defs.html#dtdelement_code.qname">

[2]
:[[開始タグ]]:必須
:[[終了タグ]]:必須
:[[内容模型]] (HTML 2):[CODE(SGML)[(%[[text]];)*]]
:内容模型 (HTML 4):[CODE(SGML)[(%[[inline]];)*]]
:内容模型 (XHTML 1.0):[CODE(SGML)[%[[Inline]];]]
:[[最小内容模型]] (XHTML m12n):[CODE[([CODE(XML)[[[PCDATA]]]] | [VAR[[[Inline]]]])*]]
:出現できる文脈 (HTML 2):[CODE(SGML)[%[[phrase]]]] ⊂ [CODE(SGML)[%text]] が出現できる文脈
:出現できる文脈 (HTML 4):[CODE(SGML)[%phrase]] ⊂ [CODE(SGML)[%inline]] が出現できる文脈
:出現できる文脈 (ISO-HTML):[CODE(SGML)[%[[logical.styles]]]] ⊂ [CODE(SGML)[%text]] (ISO-HTML) が出現できる文脈
:所属内容集合:([CODE(XML)[[[InlPhras.class]]]]) ⊂ ([CODE(XML)[[[Inline.class]]]]) ⊂ Inline ([CODE(XML)[[[Inline.mix]]]])
:モジュール (XHTML m12n):[[Inline Phrasal]] ⊂ [[Text]]
:[[属性]]:
,[CODE(HTMLa)[[[class]]]]	,	,	,[[級]]	,"[HTML3.0] %[[attrs]], [HTML4] %[[coreattr]], [ISO-HTML] %[[core]]"
,[CODE(HTMLa)[[[dir]]]]	,	,	,[[書字方向]]	,"[HTML4] %[[i18n]], [ISO-HTML] %i18n"
,[CODE(HTMLa)[[[id]]]]	,	,	,一意識別子	,"[HTML3.0] %attrs, [HTML4] %coreattr, [ISO-HTML] %core"
,[CODE(HTMLa)[[[lang]]]]	,	,	,[[自然言語]]	,"[HTML3.0] %attrs, [HTML4] %i18n, [ISO-HTML] %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)[[[onmousemove]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onmouseout]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onmouseover]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onmouseup]]]]	,	,	,	,[HTML4] %events
,[CODE(SGMLa)[[[SDAFORM]]]]	,[CODE[Lit]] (固定)	,==	,	,[HTML2]
,[CODE(HTMLa)[[[style]]]]	,	,	,スタイル情報	,[HTML4] %coreattr
,[CODE(HTMLa)[[[title]]]]	,	,	,注釈的題	,"[HTML4] %coreattr, [ISO-HTML] %core"

* 符号と自然言語


- [44] [CITE@ja[Xユーザーの竹麻呂さん: 「というか、&lt;code&gt;の場合&lt;code lang=""&gt;として自然言語との関連付けを切った方が適当という感もあり・・・」 / X]], [TIME[午後3:00 · 2017年10月19日][2017-10-19T06:00:53.000Z]], [TIME[2024-05-01T07:29:01.000Z]] <https://twitter.com/Takemaro_001/status/920892490118340608>
-- [45] [CITE@ja[Xユーザーの竹麻呂さん: 「BCP 47にはzxxとかいう言語タグがあるのか…(No linguistic content)うーむ…」 / X]], [TIME[午後3:20 · 2017年10月19日][2017-10-19T06:20:48.000Z]], [TIME[2024-05-01T07:29:01.000Z]] <https://twitter.com/Takemaro_001/status/920897501187547136>
-- [46] [CITE@ja[Xユーザーの竹麻呂さん: 「というかHTMLの&lt;code&gt;それ自体がコンピュータコードを表現するのだから、その時点で意味論として要素が自然言語の情報を持ってもあまり意味のないものだという気もする」 / X]], [TIME[午後3:33 · 2017年10月19日][2017-10-19T06:33:26.000Z]], [TIME[2024-05-01T07:29:01.000Z]] <https://twitter.com/Takemaro_001/status/920900681975738368>
-- [47] [CITE@ja[Xユーザーの竹麻呂さん: 「あるいは、一般のコンピュータコードについては予約語や識別子名の由来からしてlang="en"でなでしこのコードならlang="ja"みたいにするのが適当?まさか」 / X]], [TIME[午後3:36 · 2017年10月19日][2017-10-19T06:36:14.000Z]], [TIME[2024-05-01T07:29:01.000Z]] <https://twitter.com/Takemaro_001/status/920901384546828288>
-- [48] 
[CITE@ja[Xユーザーの竹麻呂さん: 「にしたって、&lt;code&gt;に限らずURLとかだって自然言語ではないわけで、うーんこの…」 / X]], [TIME[午後3:56 · 2017年10月19日][2017-10-19T06:56:41.000Z]], [TIME[2024-05-01T07:29:01.000Z]] <https://twitter.com/Takemaro_001/status/920906531184316416>


[49] これは[[言語]]とは何か、[[符号]]とは何かという哲学的課題で、考え込んだことがある人は多いと思われる(多いか?)。

[50] が、[[マーク付け言語]]はあくまで実用目的のものなのだから、あまり深く考えても仕方ないんだよぬ。
役に立つようにマークを付けるので、マークを付けるために悩むのは本末転倒なのよぬ。

[51] 
ただいえることは、[[符号]]や[[プログラミング言語]]であるからといって、必ずしも[[自然言語]]と切り離された独立の存在とは言えないのだ。
例えば[[電話番号]]は[[符号]]だが、[[自然言語]]の文脈内で読み書きされる。
また、[[プログラミング言語]]の[[識別子]]に[[英語]]を使ったり、[[日本語]]を使ったり、
[[コメント]]を[[自然言語]]で書いたりする。

[EG[
[53] もっと実際的な例を出すなら、[[日本語]]話者が読み書きする[[プログラミング言語]]のコードは、
[[文字列リテラル]]や[[コメント]]が[[中華フォント]]でなく[[日本語]]フォントで[[レンダリング]]されるように、
[CODE[[[lang]]="[[ja]]"]] が適用されるべきである。
]EG]

[52] 
もちろんそれは、逆にすべての[[符号]]が[[自然言語]]に属するということではないから、
[CODE[zxx]] のようなものを使ったり、 [CODE[lang=""]]  ([[空文字列]])
を使ったりした方がいいケースもある。




* 歴史

** [CODE[code]] の誕生

[SEE[ [[語句化内容]] ]]

** HTML4 まで


[13] RFC 1866 (HTML 2.0) は、典型的に固定幅のフォントでレンダリングされると述べています。 >>11

[3] HTML 4 仕様書は特に典型的[[レンダリング]]例を挙げていません。

[8] [[語句化内容]]も参照。


[17] [SAMP(HTML)[It was made using the <CODE>EM</CODE> element.]]
(HTML 1.0 I-D, HTML 3.0 I-D より)

[12] >>11 の RFC 1866 (HTML 2.0) の例を参照。

[10]
[PRE(HTML example)[
<[CODE(HTMLe)[p]]>
  This is text that uses our 
  <[CODE(HTMLe)[code]]>internal stylesheet</[CODE(HTMLe)[code]]>.
</[CODE(HTMLe)[p]]>
]PRE]

出典: <http://www.w3.org/TR/2002/REC-xhtml1-20020801/Overview.html#C_14>

この例で [CODE(HTMLe)[code]] にはどういう意味があるのでしょう。
よくわかりません。

[30] 

> [SAMP(HTML)[<[CODE(HTMLe)[p]]>Examples in this document that use the namespace prefix "<[CODE(HTMLe)[code]]>ev</[CODE(HTMLe)[code]]>" all assume an <[CODE(HTMLe)[code]]>xmlns</[CODE(HTMLe)[code]]> declaration <[CODE(HTMLe)[code]]>xmlns:ev="http://www.w3.org/2001/xml-events"</[CODE(HTMLe)[code]]> somewhere suitable in the document involved. All examples are informative.</[CODE(HTMLe)[p]]>]]

出典: [CITE[XML Events]] 
<http://www.w3.org/TR/2003/REC-xml-events-20031014/#s_event_module_elements>

[32]
[PRE(HTML example code)[
<dt>'''<code class="attribute-name"><a name="DOMStringList-length">length</a></code>''' of type '''<code>unsigned long</code>''', readonly</dt>
]PRE]

出典: [CITE[Document Object Model Core]] <http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMStringList-length>

[[DOM]] の仕様書の [[HTML]] 版では、定義する[[属性]]の名前の部分にこの例のようなマークがなされており、
[[スタイル・シート]]で背景が黄色に指定されています。
同様に定義する[[メソッド]]や[[定数]]は別の色になっています。
[CODE(HTMLa)[[[class]]]] 属性と[[スタイル・シート]]を効果的に利用した例であると言えるでしょう。

この例のように [CODE(HTMLe)[[[code]]]] でマークする内容が実際にどのような種類の[Q[コード]]であるのか
[CODE(HTMLa)[[[class]]]] で記述しておくと、
[[スタイル・シート]]や[[スクリプト]]で利用する時に便利です。



[33]
[CITE@en[SPARQL Protocol for RDF]] 
<http://www.w3.org/TR/2006/WD-rdf-sparql-protocol-20060125/>

この[[文書]]では[[スタイル・シート]]により[CODE(HTMLe)@en[[[code]]]][[要素]]に[[下線]]を引いています。




[22] 最近の W3C の Note を見ていると、マーク付け文書の素片が
[CODE(HTMLe)[code]] でマークされていたりします。
Texinfo は [CODE[@code]] をプログラムに限定していますし、
HTML の仕様書でも半分くらいはプログラムと限定していますけど、
マークにも応用するくらいは許されてもよさそうなものです。

同様にプロトコル要素の素片 (たとえば HTTP のメッセージの一部、
[[言語札]]、[[媒体型]]、更に言えば [[URI参照]]や[[ファイル名]])
にも適用するのも良いかもしれませんが、
これは議論の余地があるかもしれません。



[[#comment]]


* @code 命令 (GNU Texinfo)

[5] GNU Texinfo の [DFN[[CODE[@code]]]] 命令は、
[[プログラム]]片 (構文的字句全体) を示します。
<http://www.gnu.org/software/texinfo/manual/texinfo/texinfo.html#code>

[CODE[@code]] が相応しい例:
- プログラムの[[式]]
- プログラムの[[変数名]]
- プログラムの[[関数名]]
- [[プログラム言語]]の[[鍵語]]
- プログラム言語風の言語 (例: Texinfo) の[[命令]]

[CODE[@code]] が相応しくない例:
- [[シェル]]の命令名 → [CODE[@[[command]]]]
- シェルのオプション (単独) → [CODE[@[[option]]]]
- シェル命令全体は [CODE[@code]] より [CODE[@[[samp]]]]
の方が良いこともある。
- [[環境変数]] → [CODE[@[[env]]]]
- 構文的字句より小さな単位の文字列片・文字 → [CODE[@[[samp]]]]
- 打鍵文字列 → [CODE[@[[kbd]]]]

使用例:
- [SAMP[@code{@@code}]]
- [SAMP[The function returns @code{nil}.]]

[6] 印刷版では[[タイプライター]]風に出力します。
Info では[[単引用符]]で括って出力します。

[7] [CODE[@[[command]]]], [CODE[@[[option]]]],
[CODE[@[[env]]]] は新しい命令で、以前は
[CODE[@code]] や [CODE[@samp]] が使われていました。

[20] 
関連: [[語句化内容]]

* HTML もどき

[31] 
[[DTBook]] にもあります。

- [39] [CITE@en-US[DAISY ANSI/NISO Z39.86-2002 - The DAISY Consortium]], [TIME[2023-11-26T04:45:46.000Z]] <https://daisy.org/info-help/document-archive/archived-projects/daisy-ansi-niso-z39-86-2002-archived/>

[54] 
[[XMLspec]] にあるのは[[借用]]なのかどうか不詳

[55] [CITE[Guide to the W3C XML Specification (XMLspec) DTD, Version 2.1]], [TIME[2014-02-24T23:47:01.000Z]], [TIME[2024-08-24T02:47:15.653Z]] <https://www.w3.org/XML/1998/06/xmlspec-report.htm#AEN2821>


* [CODE[c]] 要素、 [CODE[m]] 要素

[29] [CITE@ja[サイト生成用 XML の仕様 — [[Avendia]]]], [TIME[2023-01-03T03:25:42.000Z]], [TIME[2023-04-08T06:06:56.154Z]] <http://ziphil.com/other/other/10.html#c>

>ソースコードに関連する文字列を表示するときに用いる。 [CODE[c]] 要素は実際のソースコード中に現れる文字列を引用するときに用い、 [CODE[m]] はそれ以外のソースコードに関連する文字列に対して用いる。 


* 関連

[28] [CODE[xml:space]]

* メモ






[43] [CITE[ncsa-mosaic/CHANGES at master · alandipert/ncsa-mosaic]]
( ([TIME[2014-04-07 05:40:04 +09:00]] 版))
<https://github.com/alandipert/ncsa-mosaic/blob/master/CHANGES#L1026>

[4] [CITE@en[Editorial: mark up code blocks with their language and <code>]]
([[Zirro]]著, [TIME[2018-07-24 05:11:25 +09:00]])
<https://github.com/whatwg/html/commit/a6e54621c0491ef633b0f3c4bd1f71fe72a722d8>

[25] [CITE@en[Use <code> element inside the <pre> elements with code examples · Issue #3764 · whatwg/html]]
([TIME[2018-07-26 16:57:16 +09:00]])
<https://github.com/whatwg/html/issues/3764>

[26] [CITE@en[Add <code> element inside applicable <pre> elements by Zirro · Pull Request #3768 · whatwg/html]]
([TIME[2018-07-26 16:58:14 +09:00]])
<https://github.com/whatwg/html/pull/3768>

[27] [CITE@en[Meta: update some syntax highlighting stuff]]
([[domenic]]著, [TIME[2018-08-14 02:46:21 +09:00]])
<https://github.com/whatwg/html/commit/e92c28db5a8ad0ccb3c40028315af82da63cd79e>