💾 Archived View for geminiprotocol.net › docs › ja › gemtext.gmi captured on 2024-08-31 at 11:59:07. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-07-08)
-=-=-=-=-=-=-
Gemini上でテキストの内容をサーバーから送る最も一般的な方法は、Gopherのような単なる素のテキストではなく、「Gemtext」という名前の軽量マークアップ言語を使うことです(text/geminiという非公式のMIME種別でサーバーから送られます)。この文書はこのマークアップ言語の簡単な紹介です。一見してどこかMarkdownに似ており、そちらを知っていれば飲み込みやすいでしょうが、また違った意味で異なるところもあります。
この文書を読み終えたら、時に以下を参照して記憶を呼び起こされると良いでしょう。
Gemtextのテキストは「長い行」で書かれます。つまり、執筆者(や編集者)は80文字毎に改行文字を入れたりすべきではありません。その代わり、受け取ったGeminiクライアントの方で機器の画面や利用者の好みに合わせて行を折り返すのに任せましょう。こうすることでGemtextの内容は良い見た目になり、デスクトップのモニタ、ラップトップの画面、タブレット、スマートフォンで読みやすくなります。
なお、Geminiのクライアントは利用者の画面より長いテキストの行を折り返すのですが、利用者の画面よりも短い行は結合しません。MarkdownやHTMLやLaTeXとは異なります。これはつまり、極端に短い行を含む「箇条書」の一覧や詩歌などであっても正しく表示されるということです。著者が余計な手間を掛けたり、内容の種類を正しく認識して取り扱うためにクライアント側で工夫をしなければならなかったりということがないのです。
ほとんどの「日常的」な書き物に於いてこの指針が意味するところとは、各段落につき1行を使うということだけでしょう。
なお、空行はクライアントによってその通りに呈示されます。つまり、段落間に2、3行の空行を置いたら、読者は2、3行分の空行を目にします。
Gopherと同様(そしてMarkdownやHTMLとは異なり)、Gemtextで他の文書へリンクするには、1行に書くよりありません。一文の中程にある単一の単語をリンクにすることはできません。慣れるまでに少し掛かりますが、意図としてはリンクを極めて見付けやすくするためのもので、クライアントが違った装飾を施せるようになるのです(例えば使用されているプロトコルを目立たせたり、遷移して良いか判断できるようにドメイン名を表示したりといった感じです)。実際のテキストの内容の読みやすさが損なわれることもありません。
リンクの行は以下のような見た目です。
=> https://example.com カッコいいwebサイト => gopher://example.com もっとカッコいいgopherhole => gemini://example.com 超カッコいいGeminiカプセル => sftp://example.com
つまりこういうことです。
筆者は細かいことが気になるので、上の例では全てのURLとラベルがいい感じに整列されていました。しかしGeminiではそこまで整える必要はなく、以下のようにしても大丈夫です。
=>https://example.com カッコいいwebサイト =>gopher://example.com もっとカッコいいgopherhole => gemini://example.com 超カッコいいGeminiカプセル => sftp://example.com
Gemtextは3水準の見出しに対応しています。見出しは1つの行に制限されており、1つから3つまでの#記号と1つの必須の空白文字から始まります。
# 見出し ## 子見出し ### 孫見出し
これが唯一対応している見出しの構文です。Markdownで見出しの下に-記号や=記号で下線を引いたりしても何にもなりません。
見出しに関してクライアントが特別に扱うかどうかは好きにして良いことが厳密に決まっています。多くのクライアントではこれを認識し、大きなフォントや違う色や何らかの別の装飾の種類が使われています。ただし、ただの普通のテキストの行として扱いそのまま表示するものもあり、そのようにしても大丈夫です。なぜなら見出しは内容の見た目を制御するために使われる想定ではないからです。それよりもむしろ、内容の構造についての重要な意味的な情報を与えるものです。利用者のために自動的に目次を生成するために見出しを使うクライアントもあり、長い文書の道案内に便利なことがあります。AtomやRSSのフィードを生成するソフトウェアでgemlogの投稿の題名を自動的に検出するのに見出しが使えるかもしれません。
Gemtextでは非順序付きの箇条書に対応しています。箇条書中の各項目は単一の長い行で書かれます。この行は単一の*記号と1つの必須の空白文字から始まります。
これが唯一対応している箇条書の構文です。Markdownのように*の代わりに-を使っても何にもなりません。入れ子の箇条書には対応していません。
クライアントが何らかの箇条書の項目について特別なことをするかどうかは好きにして良いことが厳密に決まっています。単に他のテキストの行のように扱うものもあります。箇条書が定義されている唯一の理由は、発展的なクライアントが*をより良い見た目の黒丸記号で置き換えたり、機器の画面に収まりきらないほど長い項目を複数行に分割して、最初の行以降が黒丸記号と同量の空白で余白が取られるようにしたり、といったことができるからです。単に表示する上でうまくいくようにするためのものなのです。
Gemtextは引用節に対応しています。引用された内容は単一の長い行で書かれ、単一の>記号から始まります。
> Gemtextは引用節に対応しています。引用された内容は単一の長い行で書かれ、単一の>記号から始まります。
クライアントが引用節に特別なことをするかどうかは好きにして良いことが厳密に決まっています。単に他のテキストの行のように扱うクライアントもあります。箇条書と同様、野心的なクライアントで気持ち良く表示させられるよう厳密に定義されているのです。
Gemtextは構文解析と呈示がとても、とても簡単なように注意深く設計されています。GeminiのクライアントはGemtextを1行ずつ処理し、前後の行と独立に各行を呈示します。=>、#、*などといった行の始めの数文字を見るだけで良いのです。
3つの逆引用符である```から始まる行は、クライアントに通常の解析モードと「書式化済みモード」との間で切り替わることを伝えます。書式化済みモードではクライアントは行がリンクであるかや見出しであるかなどは確認しません。単にそのまま表示されるのです。また、クライアントは通常の他のテキストでは可変幅のフォントを使えますが、書式化済みモードではクライアントは固定幅フォントを使わなければなりません。したがって、```の行の対はHTMLにおける<pre>タグの行と</pre>タグの行のようなはたらきをします。
書式化済みテキストはASCIIアート、ソースコードなどの内容をGemtextの文書に含めるのに使えます。クライアントが行を見出しや箇条書の項目などと誤解することがありません。また、この文書のように、Gemtextの構文を例を混じえて説明する内容を書くことにも使えます。通常クライアントが解釈するようなことなく、上記の構文の例を見られます。なぜならこれらは書式化済みモードで呈示されているからです。
行の書式化を「有効」にする行(つまり、1、3、5番目などの、文書中の行を切り替えるもの)の、```文字の後に何かしらがあると、それは書式化済みの内容の「代替テキスト」として扱われます。一般に、利用者にこの内容が目に見えることを信用すべきではありませんが、例えば検索エンジンがインデックスに含めたり、スクリーンリーダーが書式化済みの内容を朗読すべきかどうかを判断することを補助できる(例えばASCIIアートは一般に朗読すべきではないですが、ソースコードはひょっとすると読み上げたほうが良いかもしれません)可能性はあります。現時点で、代替テキストがどのように書式化されるかについて確立した慣習はありません。