H2H

H2H

紹介

[1] H2H冬日の記述に使われているマーク付け言語です。 H2H はもともと HNF to HTML という実装の名前でしたが、後にマーク付け言語の名前とされています。 この時新しい展開名を考えたような気もしますが、覚えていませんw

[2] H2H には H2H/0.9, H2H/1.0, H2H/2.0 の3つの版があります。 H2H/2.0 は今でいう wiki のようなものの記述言語として考えていたもので、 実装も仕様も固まっていませんでした。使われていたのは H2H/0.9H2H/1.0 だけです。

[3] 冬日は元々ハイパー日記システム (HNS) を使っていたので、 H2H/0.9HNSマーク付け言語である HNF の部分集合を独自に修正したものとなっています。 H2H の1つ目の H の元の由来は HNF でした。 実装もハイパー日記システムに強く影響を受けています。

[4] H2H/1.0 はどうやら H2H/0.9 と互換な拡張のようです。 実装は以前のものよりも拡張性を重視していますが、 依然ハイパー日記システムの影響を断ち切れていないのが藁えますw

構文

[5] 基本的なところは HNF を受け継いでいますが、 必ずしも同じではありません。

[6] 行指向: マークは1行で完結していなければなりません。

[7] 魔法行: H2H/1.0 では最初の行が H2H/1.0 でなければなりません。そうでなければ、 H2H/0.9 とみなされます。

[8] 頭部: 最初の OK の行までが頭部となります。 その次に空行が来て、その後が本体になります。

頭部は零個以上の頭部変数、本体は零個以上の命令とデータで構成されます。

この構造は HNF に由来しています。

[9] 頭部変数: 頭部には変数を1行に1つ記述できます。 これは meta 要素型のようなもので、 名前、空白、値 (1文字以上) と順に記述します。 名前は1文字以上の大文字 (26種類) または数字 (10種類) です。値は人間向けの自由な文字列です。 HNF に由来しています。

H2H/0.9 ではリンク (>>11) が使えます。

[12] 命令: 行頭に大文字だけの語が現れると、命令とみなします。 語の前に斜線があっても構いません。その場合、 終了命令となります。斜線なしの命令は、 開始命令またはその行だけの命令です。 その行だけか、終了命令と対になるか、 終了命令が省略可能かは、種類によって異なります。

命令の後には、値を零個以上指定できます。空白が区切りになります。 指定できる値の数は命令の種類によって決まっていて、 可変な場合もあります。最後の値は (空白があっても) 行末まで含みます。

[38] 継続: H2H/1.0 では、命令名と (あれば) リンク星の前に + を入れることができます。 これを入れると通常1行だけの命令を開始命令とし、 終了命令が現れるまで続けることができます。

[11] リンク: H2H/0.9 の頭部変数と一部の命令は、命令名の直後に * を指定すると、1つ目の値としてリンク先を記述できます。 H2H/1.0 では、どの命令 (終了命令を除きます。) でも使えます。

これは、TomsoftDiarySystem (TDS) のマーク付け言語である tdf を参考に採用した機能です。

[37] 参照: リンク先を指定する場所では、次の方法で参照先を記述します。

  1. . は、ダミーで、リンク先指定なしとなります。
  2. [({](\d{4}),?(\d{2}),?(\d{2})(?:[i,]?(\d{2})(?:[s,]?(\d{2}))?)?[)}] に一致する文字列は、日記内への参照となります。 (解釈は >>29 と同様の方法によります。)
  3. \?[({]([A-Za-z0-9_.-]+)[)}] に一致する文字列は、用語集への参照となります。 (H2H/0.9 のみです。)
  4. \?\?(?:\{([A-Za-z0-9_.-]+)\})?[(]?([\x00-\xFF]+?)[)]? に一致する文字列は、 $1 (既定値 = 既定の用語集) の用語集で指定された用語 $2 への参照となります。 (H2H/1.0 のみです。)
  5. その他は、 URI となります。

[39] 引数: H2H/1.0 では命令に引数を指定できます。 リンク星がある場合、リンク先の前でも後ろでも構いませんが、 1命令に1つだけ指定できます。終了命令には指定できません。

引数は、 { ではじまり } で終わる部分の中に書きます。引数は1個以上記述でき、 互いに ,; で区切ります。 引数の前後には空白を零個以上入れることができます。

引数は引数名と値で構成されます。引数名は小文字 (26種類)、 数字 (10種類)、 -, _ の1文字以上の並びです。値は、 ;,, }, SPACE を含まない場合、そのまま書けます。 " で囲むと、 " を除く任意の文字列 (1文字以上) を値とすることができます。ただし、実際には SPACE が含まれているのに括られていないデータがあるようです。

名前と値は => で区切ります。その前後には空白を零個以上入れることができます。 ただし、実際には =: を使うデータがあるようです。

[36] 注釈: ! ではじまり、空白が続く行全体は、注釈です。 HTML注釈宣言に相当します。

!# ではじまり、空白が続く行全体は、注釈です。 HTML に変換する場合は無視されます。

ということになっていたはずですが、空白が抜けているデータもあります。

[10] 空白: 空白として使用できるのは SPACE で、1文字以上連続して使えます。値の区切りとして使う時は、 値の個数が決まっている場合、最後の値の一部 (途中または最後の部分) として空白が使えます。

[13] データ: その他の文字列はデータになります。

データや命令の値は、 HTML 変換時に必ずしも escape されません。当初の意図はよくわかりませんが、 現在ではそういう仕様 (HTML タグを書いてもよいもの) と理解していますw

[56] 改行: 改行は、当初の仕様ではそのまま HTML に変換され、 HTML の表示時に (Webブラウザ) で場合によっては無視されるはずでしたが、 後の H2H/1.0 実装では無視されています。 このため、初期のデータの PRE 要素は改行だけを使っていますが、 後のデータでは改行の前に必ず HTML<br> を入れています。

頭部変数

[14] 頭部変数は次のものが存在するようです。 いくつかは、ハイパー日記システムに由来し、 実際には使われていません。

ハイパー日記システムでも利用者 (日記の著者) が自由に追加・編集できるようになっていますが、 H2H でも言語の機能ではなく、プロファイルの機能となっています。
名前H2H/0.9 既定プロファイルH2H/1.0 冬日プロファイル説明
TENKI天気
BASHO場所
TAION体温
LUNCH昼食
TAIJU体重
SUIMIN睡眠時間
BGM背景音楽
HOSU歩数
HON読書
KITAKU帰宅時間
WALK散歩
RUNジョギング
KEYWORD鍵語
CAT分類
KION気温
T11限
T22限
T33限
T44限
T55限
T66限
T77限
SP行事
THEME話題

命令

[16] 説明の見方:

命令名
行頭に指定する命令の名前。
リンク星
開始命令名直後の * の使用可否。 省略時は使用不可。
終了命令
終了命令の存在。
開始命令が閉じる要素
開始命令が現れた時に開かれていれば閉じる要素の命令名。 特に記述が無い限り、記述された順に高々1回閉じようと試みます。 省略時はなし。
終了命令が閉じる要素
同様に、終了命令が現れた時に開かれていれば閉じる要素の命令名。 省略時はなし。
文脈
その命令を使用できる場所。 その他とは FNULOL を除く任意の場所。省略時はその他
定義されている版。HNF 由来のものはその旨。
説明
意味など。

[40] H2H/1.0 では、終了命令は命令名に関わらず P を閉じようと試みます。

[27]

命令名
ABBR
終了命令
禁止
H2H/0.9H2H/1.0
説明
略語 (abbr 要素に相当)。

値を2つ指定しなければなりません。 1つ目は abbr 要素内容に、 2つ目は同じく title 属性に相当します。

[26]

命令名
ACRONYM
終了命令
禁止
H2H/0.9H2H/1.0
説明
acronym 要素に相当。

値を2つ指定しなければなりません。 1つ目は acronym 要素内容に、 2つ目は同じく title 属性に相当します。

[15]

命令名
CITE
リンク星
指定可能
終了命令
省略可能
開始命令が閉じる要素
PRE
終了命令が閉じる要素
PPREDIVYAMI
HNFH2H/0.9H2H/1.0
説明
引用要素型名に反して、 citation ではなく quotation のために使います。

値を高々2つ指定できます。* を指定した場合は、 値を最低1つ指定しなければなりません。

1つ目の値は、引用元URI です。 (blockquote 要素cite 属性に相当します。) 2つ目の値は、引用元の人間向け文字列による簡単な説明です。

実際のデータは星の有無と値の個数が混乱しているので、 URI らしきものを URI scheme 名で検出する必要があります。

値が零個のこともあります。

[42]

命令名
DD
H2H/1.0
説明
説明リスト説明 (dd に相当します)。

[45]

命令名
DEL
H2H/1.0
説明
削除 (del に相当します)。

[32]

命令名
DIV
終了命令
省略可能
開始命令が閉じる要素
P
終了命令が閉じる要素
PPRE
HNFH2H/0.9H2H/1.0
説明
区間。

値を1つ指定しなければなりません。 値は class 属性に相当します。

[43]

命令名
DL
H2H/1.0
説明
説明リスト (dl に相当します)。

[44]

命令名
DT
H2H/1.0
説明
説明リスト項目 (dt に相当します)。

[18]

命令名
FN
終了命令
必須
HNFH2H/0.9H2H/1.0
説明
脚注

[46]

命令名
INS
H2H/1.0
説明
削除 (ins に相当します)。

[29]

命令名
LDIARY
終了命令
禁止
文脈
LINK, LDIARY, SEE, SEE, PERSON の外 (H2H/1.0)
HNFH2H/0.9H2H/1.0
説明
日記の記事の参照。

値を2つまたは4つ指定しなければなりません。

いずれの場合も、最後の値が参照文字列 (a 要素内容に相当します。) です。

2つの1つ目は、 YYYYMMDDYYYYMMDDiII、または YYYYMMDDiIIsSS の形式とします。

4つの1つ目は YYYY、 2つ目は M (1桁又は2桁)、 3つ目は D (1桁又は2桁) の形式とします。

ただし、 Y は年、M は月、 D は日、 I は章、 S は節とします。

[23]

命令名
LI
リンク星
使用可能
終了命令
禁止
文脈
ULOL
HNFH2H/0.9H2H/1.0
説明
リスト項目。

値を1つ指定できます。項目の値 (li 要素内容に相当します。) を指定します。

リンク星を使用すると、項目の値の前にリンク先を指定できます。

H2H/1.0 では、 ULOL の中で命令なしの文字列を記述すると、 LI 命令が行頭に省略されているものとみなします。

[34]

命令名
LIMG
終了命令
禁止
HNFH2H/0.9
説明
画像

値を4つ指定しなければなりません。 1つ目はリンク先です。2つ目は align 属性に相当する記号を指定しますが、H2H では無視されます。3つ目は画像の指定です。 4つ目は代替文 (alt 属性に相当します。) です。

[19]

命令名
LINK
リンク星
使用可能
終了命令
禁止
文脈
FN、その他 (H2H/0.9); LINK, LDIARY, SEE, SEE, PERSON の外 (H2H/1.0)
HNFH2H/0.9H2H/1.0
説明
ハイパーリンク

値を2つ指定しなければなりません。1つ目はリンク先、 2つ目は名札 (a 要素内容に相当します。) です。

リンク星を使用した場合は、値は1つだけ指定しなければなりません。 値は名札です。

[35]

命令名
LMG
終了命令
禁止
H2H/0.9
説明
画像

値を2つ指定しなければなりません。 1つ目はリンク先かつ画像の場所です。 2つ目は代替文 (alt 属性に相当します。) です。

[24]

命令名
NEW
リンク星
使用可能
終了命令
禁止
開始命令が閉じる要素
PPREDIV、 節、章 (H2H/0.9); すべて (H2H/1.0)
HNFH2H/0.9H2H/1.0
説明
見出し

新しい章の始まりとなります。

値を1つ指定しなければなりません。章の名前 (hn 要素内容に相当します。) となります。

リンク星を使用すると、見出しの値の前にリンク先を指定できます。

[22]

命令名
OL
終了命令
必須
開始命令が閉じる要素
PRE
HNFH2H/0.9H2H/1.0
説明
順序付きリスト。

[17]

命令名
P
終了命令
省略可能
開始命令が閉じる要素
PPRE
HNFH2H/0.9H2H/1.0
説明
段落

[28]

命令名
PERSON
終了命令
禁止
文脈
LINK, LDIARY, SEE, SEE, PERSON の外 (H2H/1.0)
H2H/0.9H2H/1.0
説明
人名

値を2つ指定しなければなりません。 1つ目は人名録の項目名、2つ目は人名です。

[33]

命令名
PRE
終了命令
省略可能
開始命令が閉じる要素
P
HNFH2H/0.9H2H/1.0
説明
整形済文章

[47]

命令名
RB
H2H/1.0
説明
ルビ基底

[48]

命令名
RT
H2H/1.0
説明
ルビ文

[20]

命令名
RUBY
終了命令
禁止
H2H/0.9H2H/1.0
文脈
FN、その他
説明
ルビ

値2を2つ指定しなければなりません。 1つ目はルビ基底 (rb に相当します。)、 2つ目はルビ文 (rt に相当します。) です。

[30]

命令名
SEE
終了命令
禁止
文脈
LINK, LDIARY, SEE, SEE, PERSON の外 (H2H/1.0)
H2H/0.9H2H/1.0
説明
用語集への参照。

値を2つ指定しなければなりません。 1つ目は用語集の項目、2つ目は本文に示す用語 (a 要素内容に相当します。) です。

[49]

命令名
SPAN
H2H/1.0
説明
span に相当します。

[50]

命令名
STRONG
H2H/1.0
説明
strong に相当します。

[31]

命令名
SUB
リンク星
使用可能
終了命令
禁止
開始命令が閉じる要素
PPREDIV、 節 (H2H/0.9); 章以外 (H2H/1.0)
文脈
その他 (NEW が出現した後)
HNFH2H/0.9H2H/1.0
説明
小見出し

新しい節の始まりとなります。

値を1つ指定しなければなりません。章の名前 (hn 要素内容に相当します。) となります。

リンク星を使用すると、見出しの値の前にリンク先を指定できます。

[21]

命令名
UL
終了命令
必須
開始命令が閉じる要素
PRE
HNFH2H/0.9H2H/1.0
説明
順序なしリスト。

[25]

命令名
YAMI
H2H/0.9H2H/1.0
説明
すぐに読めない状態にするべき文章。

値を1つ指定して構いません。

値を1つ指定する場合は、終了命令は存在しません。 その値が要素の内容に相当します。行内要素として扱われます。

値を指定しない場合は、終了命令までが要素の内容となります。 YAMI 要素が開かれていれば、 開始命令により閉じられます。 ブロック水準要素として扱われます。

[53] H2H/1.0 は命令毎に入れ子やデータが HTML として解釈されるかを制御できるようですが、 よくわかりませんwwww

[57]

という方針で行けばうまくいくみたいw

(名無しさん)

引数

[41]

命令引数名説明
NEWcat分類 (COMMA と零個以上の空白区切り)
*classclass に相当
*content-typetext/html, text/x-h2h+html
*idid に相当
*langlang に相当
STRONGlevel強調度 (整数)
SP (頭部変数)place場所 (人間向け)
RUBYpositionbelow
CITEsource出典 (人間向け)
*stylestyle に相当
TAION (頭部変数)Time16:00 +0900 など
SP (頭部変数)time時刻 (人間向け)
*titletitle に相当
CITEuricite に相当

MIME 型

[60] text/x-h2h, text/x-h2h+html が用いられました。

拡張子

[52] .h2h を本来用いるべきところですが、歴史的経緯より .hnf もよく用いられました。

メモ

[51] draft-h2h.txt

[54] 実際に使われたことのある命令・頭部変数一覧:

ABBR
ACRONYM
CITE
DD
DEL
DIV
DL
DT
EM
FN
HOUR
INS
KION
LDIARY
LI
LIMG
LINK
LMG
LNEW
LUNCH
NEW
OK
OL
P
PERSON
PRE
RIBU ← RUBY のつもり
RUBY
SEE
SP
SPAN
STRONG
SUB
T1
T2
T3
T4
T5
T6
T7
TAION
TENKI
THEME
UL
YAMI
XML ← データとして
/CITE
/DIV
/DL
/FN
/INS
/LI
/LINK
/OL
/P
/PRE
/STRONG
/UL
/YAMI

+ がつかわれたことがあるのは LINKSTRONG だけ。

* が使われたことがあるのは T1SP, SUB, SP, NEW, LINK, LI, [CITE]]。

[55] 今までに使用された HTML 系マーク:

<a>
<a href>
</a>
<abbr>
<abbr lang>
<abbr title>
</abbr>
<acronym>
<acronym lang>
<acronym title>
</acronym>
<blockquote>
</blockquote>
<br>
<br/>
<caption>
</caption>
<code>
<code class>
<code lang>
<code wbradded> ← コピペのミス
</code>
<dd>
</dd>
<del>
</del>
<dfn>
</dfn>
<div>
<div style>
</div>
<dl>
</dl>
<dt>
</dt>
<em>
</em>
<form>
<form accept-charset>
<form action>
<form method>
</form>
<h1>
<h1 style>
</h1>
<h2>
</h2>
<h3>
</h3>
<h4>
</h4>
<img>
<img/>
<img alt>
<img class>
<img src>
<img style>
<img title>
<img type>
<input/>
<input accesskey>
<input name>
<input type>
<input value>
<ins>
</ins>
<kbd>
</kbd>
<label>
<label for>
</label>
<li>
</li>
<ol>
</ol>
<p>
<p id>
<p style>
</p>
<pre>
<pre class>
<pre style>
</pre>
<q>
<q cite>
</q>
<rb>
</rb>
<rp>
</rp>
<rt>
</rt>
<ruby>
</ruby>
<span>
<span class>
<span lang>
<span onclick>
<span style>
<span xml:lang>
</span>
<strong>
</strong>
<sub>
</sub>
<sup>
</sup>
<table>
<table style>
<tbody>
</tbody>
<td>
<td style>
<td title> ← <td abbr> の逆
</td>
<th>
<th colspan>
<th scope>
<th style>
</th>
<table style>
<table summary>
</table>
<thead>
</thead>
<tr>
</tr>
<ul>
</ul>
<var>
<var class>
<var lang>
<var title>
</var>
<local-part@domain.example> ← 電子メイル・アドレス
<!-- -->
<!--#exec cmd-->
& ← LINK 命令の1つ目の値 (URI) 中, NEW 命令のリンク値 (URI) 中, 本文中
&& ← 本文中の論理積演算子
&ame; ← 雨マーク
&amp; ← 本文中, CITE 命令の出典 URI の値中, LINK 命令の2つ目の値 (名札) 中, NEW 命令のリンク値 (URI) 中
&gt;
&hare; ← 晴マーク
&harekumori; ← 晴/曇マーク
&hearts;
&kumori; ← 曇マーク
&lt;
&quot;
&reg;
&yuki; ← 雪マーク
&#dd; ← 数値文字参照
&#ddddd; ← 数値文字参照
&#xHH; ← 十六進数文字参照
&#xHHHH; ← 十六進数文字参照
&#xhhhh; ← 十六進数文字参照

[58] H2H Classic Implementation (2004-10-25 09:03:27 +09:00 版) <http://suika.fam.cx/www/markup/h2h/implementation/classic/>

2001年3月以来の最初の H2H の実装 (2003年には既に事実上放棄されているが、 2008年現在なお一部で使っている)。 (名無しさん)

[59] <http://suika.fam.cx/www/markup/html/whatpm/Whatpm/H2H.pm>

Whatpm にこっそり入れてある最新の実装。

(名無しさん)