テーマ機能

### ハイパー日記システム Version 2.10

# テーマ機能

### テーマ機能とは?

日記の見た目(スタイル，背景，文字色など) を「テーマ」として定義でき， また あらかじめ用意されている「テーマ」を指定することで，日記の見た目を 簡単に変更できる機能です．

### テーマの利用方法

インストールされているテーマを使用するのはとても簡単です．

- 設定ファイルconfig.ph の $Theme にテーマ名を指定

するだけです。

デフォルトでは，anti-windoze とruribaka という 2つのテーマが含まれています． テーマ「anti-windoze」を利用するには，config.ph で

> `$Theme = "anti-windoze";`

と設定するだけです．

また http://www.h14m.org/dist/contrib/theme/ に寄贈されたテーマがあります。
tar.gz されたテーマをウェブ日記ディレクトリ (~/public_html/diary/) に置いて

1. $ gzip -dc *.tar.gz | tar xvf -
   (又は $ tar zxvf *.tar.gz)

として展開しテーマ名としてそのディレクトリ名を指定するだけで 利用できます．

### テーマの実体

テーマは，ウェブ日記ディレクトリ(~/public_html/diary/) にテーマ名 をつけたディレクトリ名で必要なファイルが置かれます． テーマに必要なファイルとは，

- theme.ph - テーマの設定ファイル(Perl script)
- theme-static.ph - 静的生成用のテーマの設定ファイル(Perl script)
- マークや背景の画像ファイル
- head.txt, foot.txt

です．theme-static.ph, head.txt, foot.txt はなくても構いません。 head.txt と foot.txt はテーマ・ディレクトリに存在する場合、そちらが表示されます (~/diary/conf/ にあるものは無視されます)。

theme.ph では、以下のような設定が可能です。

- ユーザ変数
- マーク
- HTMLヘッダ/出力分フッタ
- PIM(予定，TODO)
- カレンダー
- スタイル
- 1日分ヘッダ/フッタ・テンプレート
- コマンド・テンプレート

### テーマの作成

テーマを作成するということは，theme.ph を作成することと，画像を用意することです．

生成されるHTMLタグも自由に変更することが可能ですが， テーマを作成する場合， 正しいHTMLを生成するようチェックすることが望まれます．

### README の記載

テーマでユーザ変数・マークを定義した場合，利用可能なユーザ変数と その意味，マークとその意味を必ず記載したドキュメントを添付願います． テーマに関する説明は，READMEファイルに記載することが望まれます．

テーマの READMEファイルの記載例:

>     利用可能なユーザ変数
>     TENKI   天気

>     利用可能な MARK
>     !!      びっくり
>     (^^)    にっこり
>     (^^;    汗
>     ばか    ばか
>     (笑)    笑
>     後ろ    後ろ姿
>     v(^^)   Ｖサイン

### theme.ph の作成と設定

theme.ph は Perl script ですので Perl の文法に従う必要があります．

デフォルトの設定は、コメント・アウトしてある場合があります。 変更をほどこす部分は # を削除して、変更を加えて下さい。

>     % cd ~/public_html/diary
>     % mkdir yours
>     % cp japanese/theme.ph yours
>     % vi yours/theme.ph

などとします。

### ユーザ変数

使用可能なユーザ変数を、

>     package HNS::Hnf::UserVar;
>     $Templates{変数名} = "テンプレート";

という形式で設定します。

使用可能なパラメータは、

パラメータ名 | 説明
--- | ---
%value | hnf で指定した値
%user{USER_VAR_NAME} | USER_VAR_NAME が出力される文字列

です。

> ex)

>     package HNS::Hnf::UserVar;
>     $Templates{'BASHO'} = "＠%value";
>     $Templates{'TENKI'} = "天気: %value %user{BASHO}";

### マーク

使用可能なマークと画像ファイル名を

>     package HNS::Hnf::Command::MARK;
>     $List{'(^^)／~'} = 'icons/bye.gif';

のように設定します。

### HTML 設定

package は HNS::ExtHTML。

$DOCTYPE
  ドキュメント・タイプ

  > デフォルト値

  >     qq(<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  >         "http://www.w3.org/TR/REC-html40/loose.dtd">\n);

$Head
  <head></head>内に入れる文字列

  > デフォルト値

  >     <meta http-equiv="Content-Style-Type" content="text/css">
  >     <style type="text/css"><!--
  >      h3.new { margin-left: 1em }
  >      div.uservar { font-weight: bold; }
  >      div.section { margin-left: 2em; margin-top: 0 }
  >      div.sub { margin-left: 1em; margin-top: 0 }
  >      div.list { margin-left: 1em }
  >      div.fn { margin-left: 1em; margin-top: 0 }
  >      div.url { margin-bottom: 0 }
  >      pre {
  >       white-space:  pre;
  >       padding:      0.5em;
  >       border-color: #ffeeb0;
  >       border-style: outset;
  >       border-width: 4px
  >      }
  >      a.hide:link { color: black; text-decoration: none }
  >      span.bold-red { color: red; font-weight: bold }
  >      div.bold-red { color: red; font-weight: bold }
  >     --></style>
  >     );

$BodyVal
  <body ほげほげ>のほげほげの所に入る文字列

  > デフォルト値 undef

$DynamicPrintFunc
  動的にメッセージを出力する関数へのリファレンス

  > デフォルト値 undef

### 出力分フッタ表示

package は HNS::Collection。

変数名 | 説明 | デフォルト値
--- | --- | ---
$FootMessages{'HasContent'} | 1日以上の日記を出力した場合のフッタ・メッセージ。 %num は出力した日記数に展開 | "以上、%num 日分です。\n";
$FootMessages{'NoContent'} | 指定した日記が無かった場合のフッタ・メッセージ | "該当するものはありません。\n";

### PIM(Personal Infomation Management)

### 予定

package HNS::PIM::Schedule

@WeekString
  曜日文字列配列

  > デフォルト値

  >     ('<font color="red">日</font>',
  >     '月', '火', '水', '木', '金',
  >     '<font color="blue">土</font>');

$ContentTemplate
  各予定のテンプレート

  > デフォルト値

  >     qq(<li><strong>%month/%day%week</strong>
  >     %content</li>\n);

$BeginTemplate
  予定を囲むテンプレート(開始)

  > デフォルト値

  >     "<ul>";

$EndTemplate
  予定を囲むテンプレート(終了)

  > デフォルト値

  >     "</ul>";

### ToDo

package HNS::PIM::Todo;

$ContentTemplate
  各項目のテンプレート

  > デフォルト値

  >     "<li><strong>%priority</strong>%content</li>\n";

$BeginTemplate
  Todo リストを囲むテンプレート(開始)

  > デフォルト値

  >     "<ul>";

$EndTemplate
  Todo リストを囲むテンプレート(終了)

  > デフォルト値

  >     "</ul>";

### カレンダー

#### テーブル使用

package HNS::Calendar::Table;

@WeekString
  曜日文字配列

  > デフォルト値

  >     ('<font color="red">日</font>',
  >     '月', '火', '水', '木', '金',
  >     '<font color="blue">土</font>');

$TableBorder
  表枠

  > デフォルト値 0

$NextTemplate
  来月へのリンク．%year は年へ，%month は月へ変換されます．

  > デフォルト値

  >     qq(<a href="$HNS::System::MyDiaryURI?%year%month">来月</a>);

$DayCurrentTemplate
  現在表示されている日記へのカレンダーからのリンク． %ruri は $ENV{'REQUEST_URI'} に，%{ymd} は YYYYMMDD に， %day は日に変換されます．

  > デフォルト値

  >     qq(<a href="%ruri#%{ymd}0">%day</a>);

$DayNonCurrentTemplate
  現在表示されていない日記へのカレンダーからのリンク

  > デフォルト値

  >     qq(<a href="$HNS::System::MyDiaryURI?%year%month%abc#%{ymd}0">%day</a>);

### スタイル

package HNS::Style;

$Templates{Table}->{pim}
  スタイルTable の PIM 表示テンプレート． %schedule は予定表示に，%todo は ToDo表示に変換されます．

  >     qq(
  >     <hr>
  >     <table summary="pim" width="100%">
  >     <tr><th align="left">予定</th><th align="left">TODO</th></tr>
  >     <tr><td valign="top">
  >     %schedule
  >     </td>
  >     <td valign="top">
  >     %todo
  >     </td></tr>
  >     </table>
  >     );

$Templates{Table}->{head_style}
  スタイルTable のヘッダ・レイアウトのテンプレート．%pim は $Templates{Table}->{pim} で定義した内容となります．

  >     qq(
  >     %pim
  >     <hr>
  >     <table summary="calendar">
  >     <tr>
  >     <td rowspan="2" valign="top">
  >     %calendar
  >     </td>
  >     <td valign="top">
  >     %unagi
  >     </td>
  >     </tr>
  >     <tr>
  >     <td valign="bottom">
  >     %direct_calendar
  >     </td>
  >     </tr>
  >     </table>
  >     <hr>
  >     );

### 1日分ヘッダ/フッタ・テンプレート

package HNS::Diary

$Head
  日記の日付表示部分．%year は年へ，%month は月へ，%high は日の十の位に，%{day} は日に，%week は曜日に，%user{HOGE} はユーザ変数HOGE へ変換されます．

  > デフォルト値

  >     qq(
  >     <h2><a class="hide" href="$HNS::System::MyDiaryURI?%year%month%abc&amp;to=%year%month%{day}0#%year%month%{day}0"
  >     name="%year%month%{day}0">%year年%month月%day日(%week)</a>
  >     [<a href="./?%month%day">n年日記</a>]</h2>
  >     );

$UserVar
  ユーザ変数の内容を表示。

  > デフォルト値

  >     qq(<div class="uservar">
  >      %user{TENKI}%user{BASHO}%user{TAIJU}%user{TAION}%user{SUIMIN}%user{BGM}
  >      %user{HOSU}%user{HON}%user{KITAKU}
  >     </div>);

$Foot
  1日分の終了

  >     qq(<hr>\n);

### コマンド・テンプレート

package HNS::Hnf::Command::NEW

$Template
  NEW のテンプレート．%new は当該セクションのセクションID に %cat は カテゴリー表示(アイコン表示)に，%content は当該セクションの内容に変換されます．

  >     qq(
  >     <h3 class="new"><a class="hide" name="%year%month%day%new" title="%year%month%day%new"
  >     href="$HNS::System::MyDiaryURI?%year%month%abc&amp;to=%year%month%day%new#%year%month%day%new">#%mark</a>
  >     %cat %content</h3>
  >     <div class="section">\n);

$EndTemplate
  NEW の終了テンプレート

  > デフォルト値

  >     "</div><!-- end of NEW -->\n";

### ハイパー日記システム Version 2.10

Index