プログラム実装用setext-j言語仕様(案) ======================================                          1996年9月23日                                川俣 晶  この文章は、実際にプログラムを書くにあたって、プログラマが使えるようなsetext-jの仕様書を目指して作成したものです。  ただし、読める人間が少なすぎるのも困るので、BNFやyaccのような表記は使わず、日本語で書きました。それにより、曖昧な点が入り込んでいるかもしれません。  基本的に、NIFTY-Serve go fshtext, mes 14, #327 戸次 大介さんの「setext-j規約会議の内容報告」を元に作成をしていますが、間違い等ありましたら、ご指摘下さい。 setext-jの定義 --------------  setext-jとは、日本語を主要な表記とし、簡易な構造を持つテキストを記述するためのマークアップ言語である。 setext-jの判別方法 ------------------  setext-jテキストには、少なくとも一つのsubhead-ttマークアップが含まれなければならない。  プレーンテキストとsetext-jテキストの自動判別を行うプログラムの作成者は、この事実を判定の基準に使って良い。  個々のsetext-jタグを、個別に利用する、しないと区別する手段がないことに注意。ビューア作者は、すべての定義されたタグを、プレーンテキストとは異なるビジュアルに展開するようにプログラミングする可能性がある。 文字セット ----------  用いることのできる文字はJIS X 0201で規定されているローマ文字用図形図形キャラクタ集合に含まれる文字および、JIS X 0208で規定される文字である。  これは、いわゆる半角英数記号と、メーカー独自文字を除くすべての全角文字に該当する。半角カナおよび半角カナ記号を含まない。  制御記号としては、改行のみを使用する。改行の文字コードは、setext-jを利用する環境の規定に従う。 段落の記述 ----------  段落を明確に規定するための手段は二つある。  一つは、indent-ttを使用せずに文章を記述し、段落末に改行記号を置く方法。  もう一つは、indent-ttを使用し、空行によって、段落の区切りを明示する方法である。  indent-ttの直後の空行は、段落区切りと見なされる。indent-ttを解釈するビューアは、この空行を削除して表示するものと規定する。つまり、indent-ttによる段落直後に空行が欲しい場合は、少なくとも二つの空行を置く必要がある。 setextとの相違点 ----------------  setext-jは、基本的にオリジナルsetextの仕様のスーパーセットとなっているが、例外的に以下の二つのタグを継承していない。 * hot-tt * underline-tt  また、その他のタグの取り扱いに関しても、日本語特有の追加規定等があるため、必ずしも、setextとは完全に一致しない。  従って、setext用のツールでsetext-jテキストを処理する場合、setext-j用のツールで、setextテキストを処理する場合に、正しい結果が得られない可能性がある。  従って、厳密さを求める場合は、setextとsetext-jは、似て非なる言語として扱う必要がある。 拡張子の利用 ------------  indent-ttを用いて、空行にて段落区切りを示し、一行が日本語34桁以内の構成を取っているテキストに限り、ファイル名に対して".ETX"の拡張子を付けることができる。  これに該当しないsetext-jテキストには、".ETX"の拡張子は使用しない。ユーザーは任意の判断で、適切な拡張子を使用すること。 タグ中のタグ ------------  原則として、タグ中にタグを記述することはできない。  ruby-tt, reference-tt, refereced-ttに関しては、タグ中に記述することができる。  ruby-ttの副文字列内には、一切のタグは記述できない。  タグ中に同一タグを含むことはできない。(例:ruby-tt中にruby-ttを記述できない) ビューアが実装すべきタグ ------------------------  ビューアはすべてのタグを実装する必要はない。実装するタグと、実装しないタグの選定は、ビューア開発者の任意である。 タグ リファレンス -----------------  **subject-tt**  Inertnetの電子メールヘッダー(RFC822にて規定される)を記述して、これをsetext-jテキストの開始マークとすることができる。  Subjectフィールドを記述するために使用する文字セットは、本文を記述する文字セットと同一とする。つまり、日本語のSubjectを記述する場合に、MIME(RFC1521,RFC1522)によるエンコードを使用しない。  **title-tt**  第1レベルのタイトルを示す。  2行に渡って記述される。  1行目は、タイトルそのものを記述する。  2行目は、半角"="記号を以下に規定される文字数だけ記述する。(他の文字は、この行には書き込まない)  半角文字を1、全角文字を2としたときの長さがタイトル行と一致する。ただし、行末の空白文字(全角、半角を問わず)は含まない。  なお、ここでいうタイトル行の長さは、タグに使用された記号を含む長さである。  **subhead-tt**  第2レベルのタイトルを示す。  使用する記号が、マイナス"-"である以外、title-ttと同一の書式である。  **indent-tt**  下記の書式に該当する行を、indent-ttとする。  2文字の半角スペース+下記で規定される文字数以内の文字列+改行  (半角文字を1、全角文字を2としたときの長さが66以下)  indent-ttにおいては、先頭の半角スペース2文字は無かったものとみなされ、改行を無視して次の行と連結が行われる。  空行に遭遇した時点で、結合作業は終了する。結合された文字列全体を段落と見なす。  この空行はindent-ttの区切りを意味する一種のマークアップであるため、結合作業が完了したら、取り除かれる。  改行でも、indent-ttでもない行に遭遇した場合は、結合作業をそこで中断し、その行の直前を段落の終わりと見なして処理を継続する。  **bold-tt**  強調構文(ボールドタイプ)  2文字の半角アスタリスク"**"によって、文字列の前後を囲むことで、文字列が強調されていることを示す。  強調手段が選べる場合は、ボールドで表示することが期待されるが強制ではない。  段落をまたがった強調の指定はできないものとする。  段落中の"**"記号が奇数個の場合は、段落末に、"**"があるものと見なす。  **italic-tt**  強調構文(イタリックタイプ)  半角チルダ"~"によって、文字列の前後を囲むことで、文字列が強調されていることを示す。  強調手段が選べる場合は、イタリックで表示することが期待されるが強制ではない。  段落をまたがった強調の指定はできないものとする。  段落中の"~"記号が奇数個の場合は、段落末に、"~"があるものと見なす。  **include-tt**  フォーマット済みテキストの挿入  行頭に半角不等号">"+半角スペースが記述された場合、その行のそれ以後のテキストは、固定ピッチフォント(半角の幅×2=全角の幅)によってフォーマット済みと見なし、何も手を加えないで表示する。  setext-jマークアップは無視される。  改行はあるがままに扱われる。行が長すぎるからと言って、ビューアによる自動的な改行などは入れない。  1行あたり、半角文字を1、全角文字を2としたときの長さが、80以下になるように記述することを推奨する。  半角不等号">"+半角スペースは、ビューアによって、異なるビジュアルに置き換えても良い。  **bullet-tt**  順番の表示のないリストの1項目  行頭に半角不等号"*"+半角スペースが記述された場合、その行のそれ以後のテキストは、列挙されたリストの1項目と見なす。  半角不等号"*"+半角スペースは、ビューアによって、異なるビジュアルに置き換えても良い。  **quote-tt**  マークアップの打ち消し  半角アクサングラーブ"`"によって、文字列の前後を囲むことで、文字列中のマークアップに相当する記号が、マークアップではなく、本文の文字であることを示す。  マークアップに相当する記号を書きたい場合に利用する。  段落をまたがった打ち消しの指定はできないものとする。  段落中の"`"記号が奇数個の場合は、段落末に、"`"があるものと見なす。  **twobuck-tt**  行末に、2文字の半角"$$"があった場合、これをsetext-jテキスト本文の終了の記号とみなす。  このあとに、note-ttなどの非表示タグが継続する場合がある。  **suppress-tt**  表示されないテキスト  行頭に2文字の半角ピリオド".."+半角スペースが記述された場合、その行はビューアによって、一切表示されない。  **twodot-tt**  論理テキスト終了記号  非表示タグを含め、すべてのxetextテキストが終了することを意味する。  **emphasis-tt**  強調構文(アンダーラインまたは傍点タイプ)  全角"_"によって、文字列の前後を囲むことで、文字列が強調されていることを示す。  強調手段が選べる場合は、アンダーラインまたは傍点で表示することが期待されるが強制ではない。  段落をまたがった強調の指定はできないものとする。  段落中の"_"記号が奇数個の場合は、段落末に、"_"があるものと見なす。  **ruby-tt**  ルビを記述する  テキスト中の任意の箇所に、全角記号"^"+主文字列+全角記号"["+副文字列+"]"を記述することができる。主文字列は、本文と連続して表示される文字列であり、副文字列は、主文字列の読みや意味を記述するルビとなる文字列である。  ただし、表現方法は、規定されない。主文字列の上や横に、小さな文字で副文字列を添えて表示する、という表現以外の方法を使って良い。  **referencer-tt**  ある文字列に関連する情報への参照を入れる  全角"▽"記号によって、文字列の前後を囲むことで、挟まれた文字列に対する参照が存在することを示す。  ビューアは、ユーザーがその単語にアクション(例:マウスによるクリック)を起こすことで、referenced-ttによって定義された参照先を表示するよう、作ることができる。  **referenced-tt**  ある文字列に対する参照情報を記述する  全角"△"記号によって、文字列の前後を囲むことで、挟まれた文字列に対する参照が存在することを示す。先頭の全角"△"記号は、行頭に書かねばならない。文字列の終わりの全角"△"記号の後に記述される補足情報によって、いくつかの機能バリエーションが存在する。  このマークアップが存在する行は、ビューアによって表示されない。  バリエーションは以下の通り。  書式1 (行頭)△文字列△(行末)  同一テキスト中の、その場所が、参照先であることを示す。ユーザーがreferencer-ttにアクションを起こした場合、ビューアは、この行のある場所に表示位置を移動させる。  書式2 (行頭)△文字列△(任意の数の空白)【文字列2】(行末)  参照対象が、文字列2であることを示す。ユーザーがreferencer-ttにアクションを起こした場合、ビューアは、文字列2を表示する。  書式3 (行頭)△文字列△(任意の数の空白)URL-tt(行末)  参照対象が、URL-ttで指定されるインターネット(またはFile:によるローカル)リソースであることを示す。ユーザーがreferencer-ttにアクションを起こした場合、ビューアは、URL-ttで示されるデータを読み込み、何らかの形でユーザーに提示する。  **URL-tt**  URLに対する参照を記述する。  テキスト中の任意の箇所に、半角不等号"<"+URL+半角不等号">"を記述することができる。途中で段落区切りが入ってはならない。  このURLを、どのように扱うかは、ビューア依存である。URLに対するアクセス手段が無い場合は、単に表示するだけでも良い。 $$