戻る

gemtextマークアップの簡単な紹介

 Gemini上でテキストコンテンツを提供する最も一般的な方法は、Gopher上のような単なるプレーンテキストではなく、「Gemtext」と呼ばれる軽量マークアップ言語(非公式MIMEタイプtext/geminiで提供される)を使用することです。この文書は、そのマークアップ言語の簡単な紹介です。それはMarkdownと表面的に似ているところがあり、MDを知っていれば簡単に学ぶことができますが、他の点ではかなり異なっています。

 このドキュメントを読んだら、ときどき「Gemtext Cheatsheet」を参照して、記憶を呼び起こすとよいでしょう。

Gemtextのチートシート

テキスト

 Gemtext文書のテキストは「長い行」を使って書かれます。つまり、あなた(あるいはあなたのエディタ)は80文字程度ごとに改行文字を挿入してはいけません。その代わり、デバイスの画面サイズやユーザーの好みに合わせて行を折り返すのは、受信側のGeminiクライアントに任せてください。こうすることで、Gemtextのコンテンツは、デスクトップモニター、ラップトップ画面、タブレット、スマートフォンで見栄えがよく、読みやすくなります。

 Geminiクライアントは、ユーザーの画面より長いテキストの行を分割しますが、Markdown、HTML、LaTeXで起こるような、ユーザーの画面より短い行を結合することはないことに注意してください。つまり、例えば「点描」リストや意図的に行を短くした詩などは、作者が余計な作業をしたり、クライアントがそのようなコンテンツを正しく認識して処理するために多少賢くなったりしなくても、正しく表示されるのです。

 ほとんどの「日常的な」文章では、このアプローチは、おそらく1段落に1行だけを使用することを意味します。

 空白行は、クライアントがそのまま表示します。つまり、段落の間に2~3行の空白行を入れると、読者は2~3行の空白行を見ることになります。

リンク

 Gopherのように(そしてMarkdownやHTMLのように)、Gemtextでは他の文書へのリンクをそれ自身の行にしか貼ることができません。文章の途中の一語をリンクにすることはできません。これには少し慣れが必要ですが、リンクを見つけるのが非常に簡単で、クライアントが実際のテキストコンテンツの読みやすさを妨げることなく、リンクをさまざまなスタイル(たとえば、使用するプロトコルを明確にしたり、ドメイン名を表示してユーザーがリンクをたどるべきかどうかを判断しやすくしたり)にすることができることを意味します。

 リンクラインは次のようなものです。

=> https://example.com クールなWebサイト
=> gopher://example.com さらにクールなGopherホール
=> gemini://example.com 最高にクールなGeminiカプセル
=> sftp://example.com

これは……
各行は「=>」の2文字から始まります。
その後に、空白文字(スペースまたはタブ、いくつでも可)が続きます。
その後に、URL (好きなプロトコル) を続けます。
上記の sftp の例のように、そのまま終わらせることもできます!
あるいは、少なくとも1つのスペースかタブが続くようにすることもできます。
そして、人にやさしいラベルを、好きなだけ長く書くことができます。
上記の例では、著者が衒学的であったため、すべてのURLとラベルがきれいに並んでいます。しかし、Geminiは気にしないので、これも大丈夫です。

=>https://example.com クールなWebサイト
=>gopher://example.com さらにクールなGopherホール
=> gemini://example.com 最高にクールなGeminiカプセル
=> sftp://example.com

見出し

 Gemtextは3つのレベルの見出しをサポートしています。見出しは1行に限られ、1つ、2つ、または3つの記号で始まり、その後に1つの強制的な空白文字が続きます。

# 大見出し

## 中見出し

### 小見出し

 これは、サポートされている唯一の見出し構文です。Markdownのように「-」や「=」の記号を使って見出しに下線を引いても、何も起こりません。

 クライアントが見出しについて特別なことをするのは、厳密に言えば任意です。多くのクライアントは見出しを認識し、大きなフォントや異なる色、その他のスタイリングを使用しますが、一部のクライアントはそうせず、通常のテキスト行として扱い、そのまま印刷します。なぜなら、見出しはコンテンツの見た目をコントロールするために使われるものではないからです。むしろ、見出しはコンテンツの構造に関する重要な意味情報を提供するものだからです。クライアントによっては、見出しを利用して自動的に目次を生成し、大きな文書を閲覧するのに便利な場合があります。また、AtomやRSSフィードを生成するソフトウェアでは、見出しを使ってgemlogの投稿タイトルを自動的に検出することができます。

リスト

 Gemtextは順序不同のリストをサポートしています。リストの各項目は長い1行で記述され、「*」記号1つで始まり、必須の空白文字が1つ続きます。

* Mercury
* Gemini
* Apollo

 これはサポートされている唯一のリスト構文です。Markdownのように「*」の代わりに「-」を使用しても、何も起こりません。ネストされたリストはサポートされていません。

 クライアントがリストアイテムに対して特別なことをするのは厳密には任意であり、クライアントによっては他のテキスト行と同じように扱います。リストが定義されている唯一の理由は、より高度なクライアントが「*」をより見栄えのする箇条書き記号に置き換えることができるようにするためと、デバイスの画面に収まらないほど長いリスト項目を複数行に分割する場合、最初の行以降の行を箇条書き記号と同じ量のスペースでマージンからオフセットすることができるようにするためです。これはタイポグラフィ上の工夫です。

ブロッククオート

 Gemtextはブロッククオートをサポートしています。引用された内容は、1文字で始まる1つの長い行として記述されます。

> Gemtext はブロッククオートをサポートしています。 引用された内容は、1つの「>」文字で始まる長い1行として記述されます。

 クライアントがブロッククオートを使って特別なことをするのは厳密に任意であり、クライアントによっては他のテキスト行と同じように扱われることもあります。リスト項目と同様に、野心的なクライアントでより快適なタイポグラフィを可能にするために厳密に定義されています。

プリフォーマットテキスト

 Gemtextは、パースとレンダリングがとてもとても簡単になるように注意深く設計されています。GeminiクライアントはGemtextを一度に1行ずつ処理し、各行をその前後の行とは独立してレンダリングします。行の最初の数文字を覗いて、「=>」、「#」、「*」、などのようなものをチェックするだけです。

 「```」で始まる行は、クライアントに通常の解析モードと「プリフォーマットモード」の切り替えを指示します。プリフォーマットモードでは、クライアントはその行がリンクか見出しか、あるいは他の何かであるかどうかをチェックしません。それらは単にそのまま印刷されます。また、クライアントは通常のテキストには可変幅のフォントを使うことができますが、プリフォーマットモードではクライアントは固定幅のフォントを使わなければなりません。このように、一対の ``` 行は HTML の <pre> と </pre> タグと同じような働きをします。
 プリフォーマットテキストは、ASCIIアートやソースコードなどをGemtext文書に含める際に、クライアントが行を見出しやリスト項目などと間違えて解釈することなく利用することが可能です。また、Gemtext の構文を例として説明したこのような文書を書くのにも使えます。上の構文の例は、プリフォーマットモードで表示されるので、クライアントが通常と同じように解釈することなく見ることができるのです。

 プリフォーマット行を「*」オンにする行の「```」文字の後に来るもの (つまり、ドキュメントの最初の行、3番目、5番目などのトグル行) は、プリフォーマットコンテンツの「alt text」として扱われることがあります。一般に、このコンテンツがユーザーに見えることを当てにしてはいけませんが、例えば、検索エンジンがインデックスを作成したり、スクリーンリーダーがユーザーにこれを読んで、整形済みコンテンツを音声で読むべきかどうか(例えば、ASCIIアートは一般に読むべきではありませんが、ソースコードはおそらく読むべきです)判断するのに役立てることがあります。altテキストがどのようにフォーマットされるべきかについて、現在確立された規約はありません。

(原典)gemini://gemini.circumlunar.space/docs/gemtext.gmi
(2022年12月13日 初版)

戻る