[63] 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.9 と H2H/1.0 だけです。
[3] 冬日は元々ハイパー日記システム (HNS) を使っていたので、
H2H/0.9 は HNS のマーク付け言語である 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 に由来しています。
[12] 命令: 行頭に大文字だけの語が現れると、命令とみなします。 語の前に斜線があっても構いません。その場合、 終了命令となります。斜線なしの命令は、 開始命令またはその行だけの命令です。 その行だけか、終了命令と対になるか、 終了命令が省略可能かは、種類によって異なります。
命令の後には、値を零個以上指定できます。空白が区切りになります。 指定できる値の数は命令の種類によって決まっていて、 可変な場合もあります。最後の値は (空白があっても) 行末まで含みます。
[38] 継続:
H2H/1.0 では、命令名と (あれば)
リンク星の前に +
を入れることができます。
これを入れると通常1行だけの命令を開始命令とし、
終了命令が現れるまで続けることができます。
[11] リンク:
H2H/0.9 の頭部変数と一部の命令は、命令名の直後に
*
を指定すると、1つ目の値としてリンク先を記述できます。
H2H/1.0 では、どの命令 (終了命令を除きます。)
でも使えます。
[37] 参照: リンク先を指定する場所では、次の方法で参照先を記述します。
.
は、ダミーで、リンク先指定なしとなります。 [({](\d{4}),?(\d{2}),?(\d{2})(?:[i,]?(\d{2})(?:[s,]?(\d{2}))?)?[)}]
に一致する文字列は、日記内への参照となります。
(解釈は >>29 と同様の方法によります。)\?[({]([A-Za-z0-9_.-]+)[)}]
に一致する文字列は、用語集への参照となります。
(H2H/0.9 のみです。)\?\?(?:\{([A-Za-z0-9_.-]+)\})?[(]?([\x00-\xFF]+?)[)]?
に一致する文字列は、 $1
(既定値 = 既定の用語集)
の用語集で指定された用語 $2
への参照となります。 (H2H/1.0 のみです。)[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/0.9 既定プロファイル | H2H/1.0 冬日プロファイル | 説明 |
TENKI | ○ | ○ | 天気 |
BASHO | ○ | 場所 | |
TAION | ○ | 体温 | |
LUNCH | ○ | 昼食 | |
TAIJU | ○ | 体重 | |
SUIMIN | ○ | 睡眠時間 | |
BGM | ○ | 背景音楽 | |
HOSU | ○ | 歩数 | |
HON | ○ | 読書 | |
KITAKU | ○ | 帰宅時間 | |
WALK | ○ | 散歩 | |
RUN | ○ | ジョギング | |
KEYWORD | ○ | 鍵語 | |
CAT | ○ | 分類 | |
KION | ○ | ○ | 気温 |
T1 | ○ | ○ | 1限 |
T2 | ○ | ○ | 2限 |
T3 | ○ | ○ | 3限 |
T4 | ○ | ○ | 4限 |
T5 | ○ | ○ | 5限 |
T6 | ○ | ○ | 6限 |
T7 | ○ | ○ | 7限 |
SP | ○ | ○ | 行事 |
THEME | ○ | 話題 |
[16] 説明の見方:
*
の使用可否。
省略時は使用不可。その他とは
FN
、UL
、
OL
を除く任意の場所。省略時はその他。
[40] H2H/1.0 では、終了命令は命令名に関わらず
P
を閉じようと試みます。
値を2つ指定しなければなりません。
1つ目は abbr
要素の内容に、
2つ目は同じく title
属性に相当します。
値を2つ指定しなければなりません。
1つ目は acronym
要素の内容に、
2つ目は同じく title
属性に相当します。
CITE
PRE
P
、PRE
、DIV
、
YAMI
値を高々2つ指定できます。*
を指定した場合は、
値を最低1つ指定しなければなりません。
1つ目の値は、引用元の URI です。
(blockquote
要素の
cite
属性に相当します。)
2つ目の値は、引用元の人間向け文字列による簡単な説明です。
実際のデータは星の有無と値の個数が混乱しているので、 URI らしきものを URI scheme 名で検出する必要があります。
値が零個のこともあります。
値を1つ指定しなければなりません。
値は class
属性に相当します。
値を2つまたは4つ指定しなければなりません。
いずれの場合も、最後の値が参照文字列 (a
要素の内容に相当します。) です。
2つの1つ目は、 YYYYMMDD
、
YYYYMMDDiII
、または
YYYYMMDDiIIsSS
の形式とします。
4つの1つ目は YYYY
、
2つ目は M
(1桁又は2桁)、
3つ目は D
(1桁又は2桁) の形式とします。
ただし、 Y は年、M は月、 D は日、 I は章、 S は節とします。
値を1つ指定できます。項目の値 (li
要素の内容に相当します。) を指定します。
リンク星を使用すると、項目の値の前にリンク先を指定できます。
H2H/1.0 では、 UL
や OL
の中で命令なしの文字列を記述すると、 LI
命令が行頭に省略されているものとみなします。
値を4つ指定しなければなりません。
1つ目はリンク先です。2つ目は align
属性に相当する記号を指定しますが、H2H
では無視されます。3つ目は画像の指定です。
4つ目は代替文 (alt
属性に相当します。) です。
LINK
FN
、その他 (H2H/0.9);
LINK
, LDIARY
,
SEE
, SEE
,
PERSON
の外 (H2H/1.0)値を2つ指定しなければなりません。1つ目はリンク先、
2つ目は名札 (a
要素の内容に相当します。)
です。
リンク星を使用した場合は、値は1つだけ指定しなければなりません。 値は名札です。
値を2つ指定しなければなりません。
1つ目はリンク先かつ画像の場所です。
2つ目は代替文 (alt
属性に相当します。) です。
新しい章の始まりとなります。
値を1つ指定しなければなりません。章の名前
(hn
要素の内容に相当します。)
となります。
リンク星を使用すると、見出しの値の前にリンク先を指定できます。
値を2つ指定しなければなりません。 1つ目は人名録の項目名、2つ目は人名です。
値2を2つ指定しなければなりません。
1つ目はルビ基底 (rb
に相当します。)、
2つ目はルビ文 (rt
に相当します。) です。
値を2つ指定しなければなりません。
1つ目は用語集の項目、2つ目は本文に示す用語
(a
要素の内容に相当します。) です。
SUB
P
、
PRE
、DIV
、
節 (H2H/0.9); 章以外 (H2H/1.0)NEW
が出現した後)新しい節の始まりとなります。
値を1つ指定しなければなりません。章の名前
(hn
要素の内容に相当します。)
となります。
リンク星を使用すると、見出しの値の前にリンク先を指定できます。
値を1つ指定して構いません。
値を1つ指定する場合は、終了命令は存在しません。 その値が要素の内容に相当します。行内要素として扱われます。
値を指定しない場合は、終了命令までが要素の内容となります。
YAMI
要素が開かれていれば、
開始命令により閉じられます。
ブロック水準要素として扱われます。
[53] H2H/1.0 は命令毎に入れ子やデータが HTML として解釈されるかを制御できるようですが、 よくわかりませんwwww
という方針で行けばうまくいくみたいw
(名無しさん)
命令 | 引数名 | 説明 |
NEW | cat | 分類 (COMMA と零個以上の空白区切り) |
* | class | class に相当 |
* | content-type | text/html , text/x-h2h+html |
* | id | id に相当 |
* | lang | lang に相当 |
STRONG | level | 強調度 (整数) |
SP (頭部変数) | place | 場所 (人間向け) |
RUBY | position | below |
CITE | source | 出典 (人間向け) |
* | style | style に相当 |
TAION (頭部変数) | Time | 16:00 +0900 など |
SP (頭部変数) | time | 時刻 (人間向け) |
* | title | title に相当 |
CITE | uri | cite に相当 |
[60] text/x-h2h
, text/x-h2h+html
が用いられました。
[58]
H2H Classic Implementation (2004-10-25 09:03:27 +09:00
版) https://suika.suikawiki.org/www/markup/h2h/implementation/classic/
2001年3月以来の最初の H2H の実装 (2003年には既に事実上放棄されているが、 2008年現在なお一部で使っている)。
[59] https://suika.suikawiki.org/www/markup/html/whatpm/Whatpm/H2H.pm
Whatpm にこっそり入れてある最新の実装。
[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
+
がつかわれたことがあるのは LINK
と STRONG
だけ。
*
が使われたことがあるのは T1
〜SP
,
SUB
, SP
, NEW
,
LINK
, LI
, [CITE
]]。
<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; ← 雨マーク & ← 本文中, CITE 命令の出典 URI の値中, LINK 命令の2つ目の値 (名札) 中, NEW 命令のリンク値 (URI) 中 > &hare; ← 晴マーク &harekumori; ← 晴/曇マーク ♥ &kumori; ← 曇マーク < " ® &yuki; ← 雪マーク &#dd; ← 数値文字参照 &#ddddd; ← 数値文字参照 &#xHH; ← 十六進数文字参照 &#xHHHH; ← 十六進数文字参照 &#xhhhh; ← 十六進数文字参照