GNSの日記マスタで使用することのできる命令の文法を解説します。これらをひとつも使わなくても日記マスタを書くことは可能ですが、覚えることでより便利な表現が使えるようになります。

  1. 基本形とエスケープ
  2. 日付属性に関する命令
  3. ブロック属性に関する命令
  4. 段落属性に関する命令
  5. 段落内命令
  6. システム変数

基本形とエスケープ

GNSの命令と、後述するURI置換・マクロなどの特殊文は、すべて"@"で始まります。"@"で始まる文を含む行は、以下の順序で処理されます。

  1. 「ユーザーマクロ・システムマクロ」による置換を行います。
  2. 「URI置換」による置換を行います。
  3. GNSのシステム変数による置換を行います。

いかなる場合でも"@"という文字そのものが表示されるように日記マスタなどに記述したいときは、"@"の文字の代わりに"¥@"という文字列を書いてください。これを「エスケープする」といいます。同様に、エスケープできる文字として"¥/"・"¥>"・"¥,"があります。

"¥@"の代わりに"@"と書いても、同様にエスケープすることができます。

日付属性に関する命令

「日付属性」とは、ある日付の日記に与える固有の情報のことです。たとえばその日の「天気」などが、これにあたります。

「日付属性」は、ダイジェストやベースページ内では、日付と同じ部分に表示されます。言い換えると、日付部分に表示するもののことを「日付属性」と呼ぶことになります。

なお、これらの命令の引数に、HTMLタグを含むことは推奨していません。

@time
(1): @time 12:34
(2): @time 24:34:56
(3): @time full 2004/06/15 12:34:56
(4): @time file
この日の日記を、指定した時間に記述したことにします。このデータは「RSS/Atomファイル」に出力され、RSS/Atom上での記述時刻を設定することができます。
時刻の書き方には、4種類の方法があります。以下では、"hh"は「時」、"mm"は「分」、"ss"は「秒」を示します。
  1. "hh:mm"。最も単純な時刻表記です。「時」は24以上を指定することができ、翌日の時刻となります。
  2. "hh:mm:ss"。「秒」を付加した時刻表記です。「時」は24以上を指定することができ、翌日の時刻となります。
  3. "full YYYY/MM/DD hh:mm:ss"。日付を完全に記す時刻表記です。
  4. "file"。日記マスタの更新時刻になります。
"@time"による指定がない場合、この日の日記の記述時刻は「日記マスタの更新時刻」となります。
@topic
@topic 今日のできごと
この日の「話題」を記述します。このデータはダイジェスト・ベースページの他に「インデックスページ」「RSS/Atomファイル」にも出力され、見出し情報となります。
@weather
@weather 晴時々曇
この日の「天気」を記述します。このデータはダイジェスト・ベースページに出力されます。
天気の記述方法には、特にルールはありません。自由に書いてかまいません。

ブロック属性に関する命令

「ブロック」とは、ある日付の日記をいくつかの表題に分けて記述するときの、個々の文章のことです。ブロックには「表題」のほか、「カテゴリ」や「時刻」などの情報を与えることができます。

なお、これらの命令の引数に、HTMLタグを含むことは推奨していません。

@title
@title 今日の夕飯
ブロックの始まりを示し、また「表題」を記述します。このデータはダイジェスト・ベースページの他に「インデックスページ」「RSS/Atomファイル」にも出力され、見出し情報となります。また自動的にアンカーが付加され、表題をブラウザで右クリックすることで、簡単にリンク先となるURIをコピーすることができます。
@time
(1): @time 12:34
(2): @time 24:34:56
(3): @time full 2004/06/15 12:34:56
(4): @time file
"@title"の直後に書くことで、このブロックを指定した時間に記述したことにします。このデータは「RSS/Atomファイル」に出力され、RSS/Atom上での記述時刻を設定することができます。
時刻の書き方には、4種類の方法があります。以下では、"hh"は「時」、"mm"は「分」、"ss"は「秒」を示します。
  1. "hh:mm"。最も単純な時刻表記です。「時」は24以上を指定することができ、翌日の時刻となります。
  2. "hh:mm:ss"。「秒」を付加した時刻表記です。「時」は24以上を指定することができ、翌日の時刻となります。
  3. "full YYYY/MM/DD hh:mm:ss"。日付を完全に記す時刻表記です。
  4. "file"。日記マスタの更新時刻になります。
"@time"による指定がない場合、このブロックの記述時刻は「ひとつ前のブロックと同じ時刻」となります。最初のブロックで省略した場合は、日記マスタの「属性」の"@time"命令で設定した時刻になります。それすらも存在しない場合は、「日記マスタの更新時刻」となります。
@category
@category PC,買い物
"@title"の直後に書くことで、このブロックが属する「カテゴリ」を記述します。このデータはダイジェスト・ベースページの他に「インデックスページ」「RSS/Atomファイル」にも出力され、見出し情報となります。特に、「カテゴリインデックスページ」は、このカテゴリごとにまとめられたリストとなって表示されます。
複数のカテゴリに属するブロックは、","で複数のカテゴリを区切って記述することができます。

段落属性に関する命令

「段落」とは、コンテンツの本文となる個々の文章のことです。段落には、「どのような文章を記述するか」という情報を与えることができます。何も指定しない場合は、"@p"が省略されているものとして、段落が始まります。

@p
@p
プレーンな「段落」です。何のオプションも付きません。

プレーンな「段落」です。何のオプションも付きません。

プレーンな「段落」です。何のオプションも付きません。
@s
@s

行頭に「アンカー」が付く「段落」です。アンカーは、日記に対するリンク先となります。

@s
アンカーは、行頭に"_"(アンダーバー)や"."(ピリオド)などの比較的目立たない文字で表示されます。この文字をブラウザで右クリックすることで、簡単にリンク先となるURIをコピーすることができます。

@s
アンカーとなる文字は、自由に設定することができます。以下をご覧ください。

_ 行頭に「アンカー」が付く「段落」です。アンカーは、日記に対するリンク先となります。

_ アンカーは、行頭に"_"(アンダーバー)や"."(ピリオド)などの比較的目立たない文字で表示されます。この文字をブラウザで右クリックすることで、簡単にリンク先となるURIをコピーすることができます。

_ アンカーとなる文字は、自由に設定することができます。以下をご覧ください。

行頭に「アンカー」が付く「段落」です。アンカーは、日記に対するリンク先となります。
アンカーは、行頭に"_"(アンダーバー)や"."(ピリオド)などの比較的目立たない文字で表示されます。この文字をブラウザで右クリックすることで、簡単にリンク先となるURIをコピーすることができます。
アンカーとなる文字は、自由に設定することができます。以下をご覧ください。
@s1
@s1
@/PIC_RIGHT//
@/JPG_120x90/20050611,CRW_7736,桜の画像/
@/PIC_END//
@s2
右の画像は、「桜の画像」です。"@s1", "@s2"のサンプルとして、例示したものです。

桜の画像
桜の画像
_ 右の画像は、「桜の画像」です。"@s1", "@s2"のサンプルとして、例示したものです。

@sの動作のうち、アンカー文字の直前までを処理します。文章の途中に画像や表などを右詰・左詰で表示したいとき、右のように記述することができます。
この命令を使わずにテーブルなどを表示した場合、アンカー文字とテーブルと文章の位置が正しく表示されないことがあります。
右の例では、"@"の文字が「命令」でないことを明示するため、"@"を"@"と表記しています。日記ページには、「"@s1", "@s2"のサンプルとして〜」と表示されます。
@s2
@s1の後に続けて、本文を記述するための「段落」です。
@c
@c
びっくり。
びっくり。
センタリング・拡大して表示される「段落」です。強調効果を持たせることができます。
@q
「引用」を記述する「段落」です。これ以降、「行に関する命令」または「タイトルに関する命令」がある行まで、日記マスタの改行や空白がそのまま(<PRE>タグで囲ったように)日記ページに出力されます。
@qcode
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main( int argc, char *argv[] ) {
    int i;

    for ( i=0; i<argc; i++ ) {
        printf( "%d: %s¥n", i, argv[i] );
    }
    return (EXIT_SUCCESS);
}

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main( int argc, char *argv[] ) {
    int i;

    for ( i=0; i<argc; i++ ) {
        printf( "%d: %s¥n", i, argv[i] );
    }
    return (EXIT_SUCCESS);
}
プログラム・HTML・CSSなど、「プログラムコードとしての引用」を記述する「段落」です。
"@q"との違いは、「プログラムコードに適したフォントになる」ことです。
タグとして使う文字("<"・">"・"&")を@qcodeのブロック内に書くと、それぞれ自動的に "&lt;"・"&gt;"・"&amp;"に置換してレンダリングされます。これは、GNS4で変更された仕様です。GNS3までは、"&lt;"・"&gt;"・"&amp;"と明示的に書く必要がありました。
この仕様変更を回避するため、@qcodeブロック内に限って "&lt;"・"&gt;"・"&amp;"と書いた場合も "<"・">"・"&"とレンダリングします。これで、GNS3までの仕様と、GNS4以降の仕様のどちらで書いても同じレンダリング結果となります。
このため、@qcodeブロック内で "&lt;"・"&gt;"・"&amp;"とレンダリングされるように書きたいときは、 "&amplt;"・"&ampgt;"・"&ampamp;"と記述してください。
記述方法 <>& &lt;&gt;&amp; &amplt;&ampgt;&ampamp;
レンダリング結果 <>& <>& &lt;&gt;&amp;
@ul
@ul
<LI>その1
<LI>その2
<LI>その3
  • その1
  • その2
  • その3
<UL>〜</UL>によるリスティングを記述する「段落」です。次の行以降、<LI>とともに、リスティングされる内容を記述します。
@ol
@ol
<LI>その1
<LI>その2
<LI>その3
  1. その1
  2. その2
  3. その3
<OL>〜</OL>によるリスティングを記述する「段落」です。次の行以降、<LI>とともに、リスティングされる内容を記述します。
@f
@s
脚注@*を試すサンプルです。
@s
も1つ脚注@*を試すサンプルです。
@s
さらにも1つ脚注@*を試すサンプルです。

@f
1つめの脚注。
@f
2つめの脚注。
@f
3つめの脚注。

_ 脚注*1を試すサンプルです。

_ も1つ脚注*2を試すサンプルです。

_ さらにも1つ脚注*3を試すサンプルです。

*1: 1つめの脚注。

*2: 2つめの脚注。

*3: 3つめの脚注。

脚注を記述する「段落」です。脚注マークを"@*"で記述し、その脚注を"@f"で記述するようになっています。
"@*"と"@f"の対応は、日記マスタの先頭(上)から文脈順になります。"@*"を3つ記述した場合、最初の"@f"が最初の"@*"に、2番目の"@f"が2番目の"@f"に、というリンクが設置されます。
@foot
@foot
この段落は、最後に置かれます。
「後書き」として、その日の最後に置かれる行となります。
@close
@s
ここまでで行管理を停止します。
@close

<TABLE border align="center">
<TR><TD>GNSの行管理を離れて、表を置きます。</TD></TR>
</TABLE>

@s
ここからまた行管理が始まります。

_ ここまでで行管理を停止します。

GNSの行管理を離れて、表を置きます。

_ ここからまた行管理が始まります。

現在の「段落」をここで終了し、次の「段落属性に関する命令」または「ブロック属性に関する命令」がある行まで、GNSによる管理機能が停止されます。
GNSによらない独自制御の文章構造や表などを挿入したいとき、この命令を使用します。
@macro
@macro マクロ名 マクロ内容
ユーザーマクロの登録をします。詳細は、「ユーザーマクロ」の項をご覧ください。

段落内命令

「段落」は、コンテンツの本文となる部分です。この中に、GNS命令などを挿入することができます。

@*
脚注マークを設置します。これに対応する"@f"の段落へジャンプするリンクとなります。
システム変数
GNSシステムが持っている固有値に置換されます。詳しくは、次項をご覧ください。
マクロ
システムマクロ・ユーザーマクロが持っている固有値に置換されます。詳しくは、「マクロ」の項をご覧ください。
HTMLタグ
段落内には、各種HTMLタグを挿入することができます。ただし、文章構造を崩すタグ(P・DIV・TABLEなど)は使わないほうが無難です。これらを使いたい場合は、"@s1"で「表の挿入を前提とした属性の段落」を作ったり、"@close"で「GNSによる文章管理機能を停止」するのがよい方法です。

システム変数

「システム変数」は、GNSが内部的に持っている値です。日記マスタや、日記ページに埋め込まれるデータの中で、これらの値を出力することができます。

変数名説明
@/lastmodified/ 最後にGNSによりページ作成作業が行われた時刻になります。日付やブロックごとの更新時刻ではないことに注意してください。
@/lastyear/ ベースページに対する「去年」の数値になります。2004年のベースページの場合は"2003"となります。
@/year/ ベースページに対する「今年」の数値になります。2004年のベースページの場合は"2004"となります。
@/nextyear/ ベースページに対する「来年」の数値になります。2004年のベースページの場合は"2005"となります。
@/month/ ベースページに対する「今月」の数値になります。6月のベースページの場合は"06"となります。
@/date/ ベースページに対する「今日」の数値になります。15日のベースページの場合は"15"となります。
@/part/ ベースページに対する「上旬・中旬・下旬」を示す文字になります。1〜10日は"a"、11〜20日は"b"、21〜31日は"c"となります。
@/PART/ ベースページに対する「上旬・中旬・下旬」を示す数値になります。1〜10日は"1"、11〜20日は"2"、21〜31日は"3"となります。
@/prevfile/ ベースページに対する「前の旬のファイル」を示すファイル名になります。2004年6月上旬のベースページの場合は、"200405c.html"となります。
@/nextfile/ ベースページに対する「次の旬のファイル」を示すファイル名になります。2004年6月上旬のベースページの場合は、"200406b.html"となります。
@/DIARY_GENERATOR/ config.phで定義した、GNSのバージョン文字列($GENERATOR)になります。"GNS/4.00"などとなります。
@/DIARY_TITLE/ config.phで定義した、日記名($DIARY_TITLE)になります。
@/DIARY_AUTHOR/ config.phで定義した、著者名($DIARY_AUTHOR)になります。
@/DIARY_EMAIL/ config.phで定義した、著者メールアドレス($DIARY_EMAIL)になります。
@/DIARY_EMAIL_NOSPAM/ 著者メールアドレス($DIARY_EMAIL)になりますが、"@"を" @(at) "に、"."を" .(dot) "に置き換えます。これは、メールアドレス収集ロボットを抑制するためのメールアドレス表記です。
@/DIARY_DESCRIPTION/ config.phで定義した、日記の説明($DIARY_DESCRIPTION)になります。
@/DIARY_COPYRIGHT/ config.phで定義した、著作権表記($DIARY_COPYRIGHT)になります。
@/DIARY_CHARSET/ config.phで定義した、文字コード($CHARSET)になります。
@/DIARY_DIGESTNAME/ config.phで定義した、ダイジェストページのファイル名($DIGESTNAME)になります。
@/DIARY_RSSNAME/ config.phで定義した、RSSファイルのファイル名($RSSNAME)になります。
@/DIARY_ATOMNAME/
config.phで定義した、Atomファイルのファイル名($ATOMNAME)になります。
※ バージョン0.3のAtomファイルを示す@/DIARY_ATOMNAME/、バージョン1.0のAtomファイルを示す@/DIARY_ATOM10NAME/を使用することもできます。
@/DIARY_PUTDIR/ config.phで定義した、日記ページを出力するディレクトリ名になります。
@/DIARY_URLBASENAME/ config.phで定義した、日記ページを配置するWWWサーバ上のURLディレクトリ名($URLBASENAME)になります。

これらを組み合わせて、例えば「@/DIARY_URLBASENAME/@/DIARY_DIGESTNAME/」などと書くことで、ダイジェストページのURLにすることができます。