使用方法

2008/05/30時点での内容。


%output_file_conf%

@of_name = @of + '_guidance.html'

インストール方法

HtmlOut_For_TPZ のインストール方法、及び 動作環境 に書いたソフトのインストールを簡単に説明します。

TaskPrize のインストール

 TaskPrize は K2さんによるシェアウェアです。 非常に高機能で、使えば使うほど味が出てきます。 まさにデスクトップ情報集約ツールです。

 インストールはいたって簡単。 普通にインストールするのみ。難しいことは何もありません。

オブジェクト指向スクリプト言語 Ruby のインストール

 オブジェクト指向スクリプト言語 Ruby は、まつもろゆきひろさんが開発したスクリプト言語です。 非常にわかりやすいプログラミング言語です。是非ともチャレンジしてみてくださ い。

 さて、この Ruby を Windows マシンにインストールしなければなりません。 しかし、どんなパッケージをインストールすれば迷ってしまうかもしれません。 そんなときは

が簡単にインストールできておすすめです。ダウンロードしてクリックするだけで path の設定も行ってくれます。

 インストールするバージョンは 1.8 以上 を強く推奨します。 おそらく、HtmlOut_For_TPZ は 1.8 以上でないと動作しない可能性があります。 *1

*1 1.8 以外の環境がないので試していません。

Rubyインストール後の確認

Ruby をインストールしたら、とりあえず下記のコマンドを実行してみてください。

C:>ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [i386-mswin32]

C:>ruby -e 'p $:'
["c:/lang/ruby/lib/ruby/site_ruby/1.8", "c:/lang/ruby/lib/ruby/site_ruby/1.8/i38
6-msvcrt", "c:/lang/ruby/lib/ruby/site_ruby", "c:/lang/ruby/lib/ruby/1.8", "c:/l
ang/ruby/lib/ruby/1.8/i386-mswin32", "."]

C:>ruby -v

このコマンドは、ruby のバージョンを表示します。 1.8 以上を確認してください。

C:>ruby -e 'p $:'

このコマンドは、ruby のライブラリパス(配列) を表示してくれます。 実は、次に述べる RubyForTPZ の tpz.so ファイル(Ruby の拡張ライブラリ) は、この中のどこかに入れておく必要があります。

RubyForTPZプラグインのインストール

 RubyForTPZプラグイン は TaskPrize のプラグインソフトです。同じくK2さんから提供されています。 この RubyForTPZ を用いることで、TaskPrize のほとんどの機能が制御可能となり ます。

 インストール方法は

  1. TaskPrize がインストールされている
  2. Ruby がインストールされている

この状態で、

  1. TaskPrize が常駐していないことを確認
  2. ファイルをプラグインフォルダに放り込む
  3. 同梱されている tpz.so ファイル(Ruby の拡張ライブラリ)をRuby の ライブラリパスのどこかに入れる
  4. TaskPrize を再起動

ちなみに私は、以下に入れています。参考まで。

C:\Lang\Ruby\lib\ruby\1.8\i386-mswin32\tpz.so

HtmlOut_For_TPZ は、Ruby スクリプによって作成されています。 よって、このプラグインが無いと実行できません。

文書作成において幸せになれるツール

 以下に、文書作成を行う上で、たぶん幸せになれると思うツールを紹介します。 HtmlOut_For_TPZ そのものは、html 生書きでも問題ありませんが、しかし、 それは自殺行為というもの。 何らかの変換ルールを介したほうが幸せになれでしょう。

 以下に紹介するツールは、Ruby で書かれており改造が容易です。

HikiDoc

 HikiDoc は、 いわゆる wiki のパーサです。 要は、簡単な文法で、そこそこの html を出力できるツールです。tDiary や Hiki のデフォルトスタイルになっています。

 現在、この HikiDic は tDiary と共に日々バージョンアップされており、 微妙な差があります。本パッケージにも同封しておいたのでこれをそのまま使用す ればとりあえず問題ないと思います。

 インストール先は、RubyForTPZ の Script フォルダです。

SunokoDoc

 SunokoDoc は、 前出 HikiDoc をさらに独自に拡張したものです。 この HtmlOut_For_TPZ では、SunokoDoc がデフォルトです。本パッケージにも同封してあり ます。

 なお、この SunokoDoc は、HikiDoc がないと動作しません。 SunokoDoc を使用する場合には必ず HikiDoc もインストールしてください。

 インストール先は、RubyForTPZ の Script フォルダです。

HtmlOut_For_TPZのインストール

 スクリプト本体 ho.rb を、RubyForTPZ の Script フォルダに入れるだけです。

アンインストール方法

TaskPrizeの設定

プロジェクトの作成及び設定

基本的な手順

文書作成方法

%doc_conf%の仕組み

基本的な考え方

HtmlOut_For_TPZ は、

により成り立っています。

その中で、 %doc_conf% の定義ファイルは、各アイテムにも記述することが可能です。 これは、「このアイテムだけ、ちょっとヘッダやフッタを変更したいなぁ」 ということに対応するためです。その実現方法として、下記にて対応を行っています。

    1)現在のアイテムに%doc_conf%がある? →実行
            ↓無い
    2)自身の親アイテムに%doc_conf%がある? →実行
            ↓無い
    3)(最上位までさかのぼり)
        最終的にプロジェクトフォルダの%doc_conf%ある? →実行
            ↓無い
    4)何もしない

よって、プロジェクトファイルに %doc_conf% を書いておけば、 以下アイテムにの設定はそのまま引き継ぐことになります。

また、あるアイテムに記述した %doc_conf% は、他のアイテムには影響を与えません。 それは、上記の判定を、アイテムごとに実施しているからです。

%doc_conf% の設定例

文書内のヘッダ、フッタ定義として

基本的にどんなものでも定義可能ですが、主目的は 「同じことを何度も書きたくない」ということですので、 そのような例として、 HtmlOut_for_TPZ には以下を定義してあります。

文字変換(url変換)として

htmlを作成していると、同じリンク先等を何度も書く必要がある場合があります。 しかし、htmlのリンク記述は決して書きやすくはありませんし、また、とても面倒です。

ということで、例えば以下の定義を行っておけば、本文は比較的簡単に記述可能です。

@home_url =     %Q|<a href="http://sunoko.s33.xrea.com/">sunoko's page</a>|
@sunoko_diary = %Q|<a href="http://sunoko.s33.xrea.com/x/d/">分身日記</a>|
@sunoko_wiki =  %Q|<a href="http://sunoko.s33.xrea.com/x/fswiki">sunoko's wiki</a>|
@sunoko_hiki =  %Q|<a href="http://sunoko.s33.xrea.com/x/hiki">sunoko's hiki</a>|
すのこのサイト一覧
    ・{{@home_url}}
    ・{{@sunoko_diary}}
    ・{{@sunoko_wiki}}
    ・{{@sunoko_hiki}}

すのこのサイト一覧


パラメータの記述方法

パラメータは、最終的には ERB にて展開されます。 よって、本文の作成方法はそれに準ずることになります。

以下、簡単な例を示します。

%doc_conf%の定義

プロジェクトフォルダの %doc_conf% (HtmlOut_for_TPZ(%doc_conf%)) には、以下が定義されています。

@to_top = %Q|<a href="#(#{@ProjectMessageId})">トップへ</a>|
@to_parent = %Q|<a href="#(#{@ParentMessageId})">項目トップへ</a>|
@to_next = %Q|<a href="#(#{@NextItemMessageId})">次項目へ</a>|
@to_prev = %Q|<a href="#(#{@PrevItemMessageId})">前項目へ</a>|

@navi = %Q|#{@to_top} #{@to_parent} #{@to_next} #{@to_prev}|

この定義方法は、Rubyの文法そのものです。 というか、Ruby のスクリプトとして読み込んでいるので、 ここで文法が間違っているとスクリプトエラーとなり実行は中止されるので注意してください。

使用方法

この定義されたパラメータを本文中で使用する方法を以下に示します。

例1)

ソース

@to_top → {{@to_top}}

実行結果

@to_top → トップ項目へ

例2)

ソース

@to_top → {{"#{@to_top}"}}

実行結果

@to_top → トップ項目へ

出力されるhtml

上記のごとく例1)と例2)では、その出力は同じです。 { 2つ } 2つ で囲われたテキストはプラグインとして解釈され、 ERB形式に展開しています。よって、Rubyの文法的に両者は同じになりますから、 出力されるhtmlも同じになります。

<h3>例1)</h3>
<p>ソース</p>
<pre>@to_top → {{@to_top}}</pre>
<hr>
<p>実行結果</p>
<p>@to_top → <a href="#(2008030319070408254@1214510797115.TPZ)">トップへ</a></p>
<h3>例2)</h3>
<p>ソース</p>
<pre>@to_top → {{"#{@to_top}"}}</pre>
<hr>
<p>実行結果</p>
<p>@to_top → <a href="#(2008030319070408254@1214510797115.TPZ)">トップへ</a></p>

例1)の方が簡単に記述できるのでお勧めです。 ただ、プラグイン中にて、Ruby のソースを記述したい、という場合には、 例2)を使ったほうがよいでしょう。(複数のパラメータを同時に出力するとか。。。)

{{"#{@to_top} #{@to_parent}"}}

トップ項目へ 上位項目へ

%doc_conf%

@home_url =     %Q|<a href="http://sunoko.s33.xrea.com/">sunoko's page</a>|
@sunoko_diary = %Q|<a href="http://sunoko.s33.xrea.com/x/d/">分身日記</a>|
@sunoko_wiki =  %Q|<a href="http://sunoko.s33.xrea.com/x/fswiki">sunoko's wiki</a>|
@sunoko_hiki =  %Q|<a href="http://sunoko.s33.xrea.com/x/hiki">sunoko's hiki</a>|

%output_file_conf%の仕組み

HtmlOut_For_TPZが出力するファイルは複数に分割可能です。 その仕組みは、各アイテムに %output_file_conf%

プロジェクトのトップフォルダの %output_file_conf% 文書には以下が書かれています。

#出力するファイル名
#出力する htmlファイルのファイル名。パスを指定すればそれなりの場所に保存
#特に指定のない場合は プロジェクトファイルのファイル名+.html
#@of_name = "out.html"
@of_full = tpz_current_project.project_filename
@of_dir  = File.dirname( @of_full ) + '\\'				#ディレクトリ 最後に \ を忘れずに
@of_base = File.basename( @of_full )
@of_ext  = File.extname( @of_full )
@of      = @of_base.gsub(/#{@of_ext}$/, '')
@of_name = @of + '.html'	#保存ファイル名

考え方は、%doc_conf%の仕組み と同じです。

ここで重要なのは、@of_nameです。 このパラメータが実際に出力されるファイル名となります。 一応ディレクトリ等も変更できるようになっていますが、 HtmlOut_For_TPZは、基本的には同一ディレクトリに存在するとしていますので、 その動作は保証しません。

ファイルを変更したいフォルダアイテムに

@of_name = @of + '_guidance.html'

のように一行だけ書いておけば、それ以下のアイテムは自動的にそのファイルになります。 上記は 使用方法 アイテムの内容です。

アイテムごとの文書設定例

【これは、このアイテムの %doc_conf% 文書にて設定した @doc_header の内容です。naviを設定していません。】

この文書だけ、header footer がおかしくなっています。

%doc_conf%の仕組み でも述べたように、%doc_conf% は変更することが可能です。

この文書では、 @doc_header と @doc_footer を書き換えています。

そして、このアイテムで書き換えた @doc_header と @doc_footer は、 他のアイテムでは影響を受けていない、ということがわかると思います。

【これは、プロジェクトフォルダの %doc_conf% 文書にて設定した @doc_footer を、このアイテムの %doc_conf% 文書にて再定義した @doc_footer です。
【これは、このアイテムの %doc_conf% 文書にて設定した @doc_header の内容です。naviを設定していません。】

%doc_conf%

@doc_header = <<EOT
【これは、このアイテムの %doc_conf% 文書にて設定した @doc_header の内容です。naviを設定していません。】
EOT

@doc_footer = <<EOT
【これは、プロジェクトフォルダの %doc_conf% 文書にて設定した @doc_footer を、このアイテムの %doc_conf% 文書にて再定義した @doc_footer です。
#{@doc_footer}】
EOT

【これは、プロジェクトフォルダの %doc_conf% 文書にて設定した @doc_footer を、このアイテムの %doc_conf% 文書にて再定義した @doc_footer です。

文書タイプについて

この、HtmlOut_For_TPZ は、「文書」を基本としたスクリプトです。 極論をいうと、あるアイテムのある文書一つで、ひとつのhtmlファイルを作成することが出来ます。

また、この「文書」の「文書タイトル」に応じ、出力するhtmlの制御を行っています。 なるべく自然な感じにしているつもりですが、癖はあるかもしれません。

文書タイトルの基本

 TaskPrizeの仕事(アイテム)には、複数の「文書」を持つことが可能となっています。 雰囲気は、タブ型エディターといった感じでしょうか。 個人的にはこの仕様がとても気に入っています。

そして、この複数文書をフルに活用しているのが、HtmlOut_For_TPZ です。

文書タイプ

HtmlOut_For_TPZ では、独自に 文書タイプというものを定義し、 それに基づいて出力を制御しています。 (RubyForTPZ の TpzItemDocument#texttype とは異なります。ちょっと紛らわしいですが。。 ho.rb で、独自に doc_type メソッドを拡張して使用しています)

文書タイプには以下を用意しています。

文書タイプ pre

 いわゆる pre です。文書内に書かれたテキストは、 無条件に <pre>〜</pre> タグで囲って出力します。

 プログラムソースや、htmlの表示等に利用します。

文書タイプ wiki

 HtmlOut_For_TPZ では、wiki、具体的には HikiDocを用いて文書の html 変換を行っています。 そして、HikiDoc を独自に拡張した SunokoDoc も使用しています。 この両者を区別するために設けた文書タイプが wikiSunokoDocです。

 文書タイプ wiki は、文書のテキストが 素のHikiDocであることを明示的に定義しています。 ただし、文書タイプが wiki であっても、<SunokoDoc>〜</SunokoDoc>で囲うことによって、 部分的に SunokoDoc を使用できます。

文書タイプ html

 文書を html とみなします。スクリプトとしては、何も加工しません。 書いてある内容のまま出力されます。

文書タイプ SunokoDoc

 私が独自にHikiDocを拡張した「テキスト→ HTML」変換ツールです。詳細は、 sunoko's hiki - SunokoDoc を参照にしてください。

 で、このHtmlOut_For_TPZ における、文書タイプ SunokoDoc とはどういうものかというと、 書かれている文書は、すべて SunokoDoc である としていることです。

 SunokoDoc は、HikiDoc 互換であることから、通常は HikiDoc として処理します。 <SunokoDoc>〜</SunokoDoc>で囲うことによって、 はじめて SunokoDoc として解釈するようになっています。 よって、文書タイプ SunokoDoc では、 無条件に <SunokoDoc>〜</SunokoDoc>で囲って出力します。

 長い文章を作成するには、HikiDoc文法よりも、SunokoDoc の方がずっと書きやすく、 また、生テキストでもみやすい、と固く信じています。

 上記のことより、この HtmlOut_For_TPZ においては、特に指示がない限り、 文書タイプは SunokoDoc として扱っています。

文書タイプの定義方法

文書タイプの定義方法は2つあります。

プロジェクトフォルダの %conf% で定義する方法

HtmlOut_for_TPZに、 以下の定義があります。

@pre_doc_list = {
#  ''        => 'wiki',   #文書名無しの場合のタイプをhiki or SunokoDoc とする。
  ''        => 'SunokoDoc',   #文書名無しはSunokoDocとする。
  '%macro%' => 'pre',
  '%conf%'   => 'pre',
  '%plugin%' => 'pre'
}

Ruby での、ハッシュ定義にて

文書タイトル => 文書タイプ

と定義することで、任意の文書タイトルを指定できます。

上記例では、%...% をいくつか定義してありますが、実は、%...% なタイトルは 無条件に pre とするようにプログラムしてあります。

なお、デフォルトの文書タイプ(具体的には、TaskPrize の機能として、 文書タイトルを付加していない文書の文書タイプ)をHikiDocとしたい場合には、 上記のコメント # を入れ替えることで可能となります。

文書タイトルそのもので定義する方法

任意の文書タイトルがついている場合、その文書タイプは SunokoDoc として扱います。 しかし、下記方法により任意指定も可能となります。

詳細は下記スクリプト参照願います。

  def doc_type
    # 文書のタイプを決定する
    if @doc_tyle == nil then
      case self.title
      when /^\%.*\%$/i
        type = 'pre'
      when /pre/i
        type = 'pre'
      when /wiki/i
        type = 'wiki'
      when /hiki/i
        type = 'wiki'
      when /html/i
        type = 'html'
      when /SunokoDoc/i
        type = 'SunokoDoc'
      else
        type = 'SunokoDoc'
      end
    else
      type = @doc_type
    end
    return type
  end

おまけ

文書タイトル中 < > で挟まれたテキストは出力されない

という細工もしてあります。これを利用すれば、任意の文書タイプを指定することが出来、 かつ、出力される html としても、自然なタイトルとして出力可能になるかと思います。

具体的には以下の文書を参照願います。

文書タイトル説明1

●文書タイトルについて

●●文書タイトル中 < > で挟まれたテキストは出力されない

<<<
title = doc.title.gsub(/<(.*?)>/,'')    #タイトル内の<?>を削除
>>>
単純な正規表現で行っているので、複雑なタイトルはうまく行かないかも。
もっとも、タイトルにそんな複雑なものをつけるわけがないので問題なし。

この文書タイトルは
    ・<pre>文書タイトル説明1

ということで、期待しているのは
    ・文書タイプ '''pre''' になる。
    ・文書タイトル→'''文書タイトル説明1'''になる

----
何がうれしいのか

想定していること。

現在、文書タイトルで、doc_type を決め、テキスト変換方法を決定している
    ・pre
    ・html
    ・hiki(wiki)
    ・SunokoDoc

で、これらは、文書タイトルからも判断できる仕組みとなっている。
しかし、そうすると、文書を印刷した場合に、文書タイトルがエレガントでない、
という問題がある。

ということで、文書タイトルをもうちょっときれいに出力したい場合に便利。


文書タイトル説明2

同じ文書を SunokoDoc にする

文書タイトルについて

文書タイトル中 < > で挟まれたテキストは出力されない

title = doc.title.gsub(/<(.*?)>/,'')    #タイトル内の<?>を削除

単純な正規表現で行っているので、複雑なタイトルはうまく行かないかも。 もっとも、タイトルにそんな複雑なものをつけるわけがないので問題なし。

この文書タイトルは

ということで、期待しているのは


何がうれしいのか

想定していること。

現在、文書タイトルで、doc_type を決め、テキスト変換方法を決定している

で、これらは、文書タイトルからも判断できる仕組みとなっている。 しかし、そうすると、文書を印刷した場合に、文書タイトルがエレガントでない、 という問題がある。

ということで、文書タイトルをもうちょっときれいに出力したい場合に便利。

preな文書

この文書タイトルは
    ・preな文書

ということで、期待しているのは
    ・文書タイプ '''pre''' になる。
    ・文書タイトル→'''preな文書'''になる

文書タイトルの pre は < > で囲われていないので、そのまま html 出力される。

半角カナのテスト文書

タイトルも半角

半角カナは、htmlでの最終段階で一気に変換しています。 以下はテストです。

半角カナのテスト

テスト】はTPZ文書では半角で書かれています。

当然、各種タイトルも変換を行います。

文字列の置換について

テキスト置換の方法は2種類あります。

2種類とも、置換文字列の指定(作成)は、 HtmlOut_for_TPZ(%doc_conf%) にて行います。

プラグイン展開による方法

テキストは {{@ho}} *1 のように作成することで展開します

プラグインとして判断しているので、pre 中は展開されません。

*1 説明文では "{ }" を"{ }" と全角で書いています。以下同様。

@gsub_list による方法

単純にテキストを変換するだけです。 変換は、doc#translate_text 変換後に展開しているので、変換後テキストは html で作成してください。

単純テキスト置換なので、pre 中テキストも置換されます。注意してください。

置換テーブルはハッシュで指定します。

	@gsub_list = {
		'置換前文字列1' => '置換後文字列1',
		'置換前文字列2' => '置換後文字列2',
		'置換前文字列3' => '置換後文字列3'
	}

間違いを防止するために、置換前文字列の前後を %%〜%% のように囲う等の工夫を実施すると良いでしょう。

(置換テーブル)HtmlOut_for_TPZ(%doc_conf%)の内容 *1

#----------------------------
#置換文字列リスト(erb でのプラグイン展開による)
#テキストは {{@ho}} のように作成することで展開する
#プラグインとして判断しているので、pre 中は展開されない
@ho = 'HtmlOut_For_TPZ'

#----------------------------
#置換文字列リスト
#置換後文字列は html で作成すること
#置換文字列は別に何でも良いのだけど、テキストを見てわかりやすくするために、
#置換元テキストを %%〜%% で囲うことを推奨する。
#単純に文字列を展開するので、例え、pre 中 であっても強制的に展開するので注意
@gsub_list = {
'%%ho%%' => 'HtmlOut_For_TPZ',
'%%TPZ%%' => %Q|<a href="http://k2top.jpn.org/index.php?TaskPrize">TaskPrize</a>|,
'%%HikiDoc%%' => %Q|<a href="http://projects.netlab.jp/hikidoc/?FrontPage.ja">HikiDoc</a>|,
'%%SunokoDoc%%' => %Q|<a href="http://sunoko.s33.xrea.com/x/hiki/SunokoDoc.html">SunokoDoc</a>|
}

(元テキスト)

*{{@ho}}と %%ho%% の違いを示します

<<<
	ここは pre です。
	{{@ho}}と %%ho%% はどうなっているでしょうか?
	%%TPZ%%がないと仕事が出来ない体になってしまいました。
>>>

(変換後テキスト)

	ここは pre です。
	{{@ho}}と HtmlOut_For_TPZ はどうなっているでしょうか?
	TaskPrizeがないと仕事が出来ない体になってしまいました。

*1 説明文では "{{ }} %%" を"{{ }}%% " と全角で書いています。

mailto:sunoko_at_avis.ne.jp // Last update:2008/05/30